在​​上一章​​的学习中,我们知道了微服务的基本概念,知道怎么基于Ribbon+restTemplate的方式实现服务调用,接着上篇博客,我们学习怎么基于Feign实现服务调用,请先学习上篇博客,然后再学习本篇博客

Feign是一个声明式的web service客户端,它使得编写web service客户端更为容易。创建接口,为接口添加注解,即可使用Feign。Feign可以使用Feign注解或者JAX-RS注解,还支持热插拔的编码器和解码器。

环境准备:

  • JDK 1.8
  • SpringBoot2.2.3
  • SpringCloud(Hoxton.SR6)
  • Maven 3.2+
  • 开发工具
  • IntelliJ IDEA
  • smartGit

创建一个SpringBoot Initialize项目,详情可以参考我之前博客:​​SpringBoot系列之快速创建项目教程​​​SpringCloud系列之声明式服务调用Netflix Feign_微服务
SpringCloud系列之声明式服务调用Netflix Feign_spring boot_02
SpringCloud系列之声明式服务调用Netflix Feign_微服务_03

port: 8083
spring:
application:
name: feign-service-consumer
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
healthcheck:
enabled: false
instance:
status-page-url-path: http://localhost:8761/actuator/info
health-check-url-path: http://localhost:8761/actuator//health
prefer-ip-address: true
instance-id: feign-service-consumer8083

​@FeignClient​​​指定服务名称,​​@RequestMapping​​指定要调用的接口

package com.example.springcloud.client.service;

import com.example.springcloud.client.bean.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
* <pre>
* UserService
* </pre>
*
* <pre>
* @author mazq
* 修改记录
* 修改后版本: 修改人: 修改日期: 2020/07/28 13:09 修改内容:
* </pre>
*/
@FeignClient(value = "EUREKA-SERVICE-PROVIDER")
@Service
public interface UserService {
@RequestMapping(value = "/api/users/{username}",method = RequestMethod.GET)
User findGithubUser(@PathVariable("username")String username);

}

加上​​@EnableEurekaClient​​​,​​@EnableFeignClients​​,写个接口进行测试

package com.example.springcloud.client;

import com.example.springcloud.client.bean.User;
import com.example.springcloud.client.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.Async;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@RestController
public class SpringcloudFeignClientApplication {

@Autowired
UserService userService;

public static void main(String[] args) {
SpringApplication.run(SpringcloudFeignClientApplication.class, args);
}

@GetMapping("/findUser/{username}")
public User index(@PathVariable("username")String username){
return userService.findGithubUser(username);
}
}

要运行eureka服务端,eureka服务提供者,代码请参考​​上一章博客​

补充:IDEA中多实例运行方法

step1:如图,不要加上勾选
SpringCloud系列之声明式服务调用Netflix Feign_eureka_04

step2:指定不同的server端口和实例id,如图:
SpringCloud系列之声明式服务调用Netflix Feign_eureka_05

服务注册,可以看到两个实例
SpringCloud系列之声明式服务调用Netflix Feign_spring_06
ok,启动eureka server(服务注册中心),eureka服务提供者端,和feign服务消费者端
SpringCloud系列之声明式服务调用Netflix Feign_微服务_07
​​​http://localhost:8083/findUser/mojombo​​​SpringCloud系列之声明式服务调用Netflix Feign_微服务_08
附录:

ok,本博客参考官方教程进行实践,仅仅作为入门的学习参考资料,详情可以参考Spring Cloud官方文档​​https://cloud.spring.io/spring-cloud-static/spring-cloud-openfeign/2.2.0.RELEASE/reference/html/​

代码例子下载:​​code download​

优质学习资料参考: