Feign是声明式的服务调用工具,我们只需创建一个接口并用注解的方式来配置它,就可以实现对某个服务接口的调用,简化了直接使用RestTemplate来调用服务接口的开发量。Feign具备可插拔的注解支持,同时支持Feign注解、JAX-RS注解及SpringMvc注解。当使用Feign时,Spring Cloud集成了Ribbon和Eureka以提供负载均衡的服务调用及基于Hystrix的服务容错保护功能。
Echo演示
Echo 服务
项目结构
├── pom.xml└── src├── main│ ├── java│ │ └── com│ │ └── example│ │ └── cloud│ │ └── nacos│ │ ├── NacosEchoApplication.java│ │ └── controller│ │ └── NacosEchoController.java│ └── resources│ └── application.yaml└── test└── java11 directories, 4 files
maven
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 引入 Spring Cloud Alibaba Nacos Discovery 相关依赖,将 Nacos 作为注册中心,并实现对其的自动配置 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
application.yaml
server:port: 6688spring:application:name: nacos-echo-service # 应用名cloud:nacos:# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类discovery:server-addr: 127.0.0.1:8848 # Nacos 服务器地址
controller
@RestControllerpublic class NacosEchoController {@Value("${server.port}")private Integer serverPort;@GetMapping("/echo")public String echo(String s) {return serverPort+" [echo]:" + s;}}
通过修改启动配置的server.port属性。启动两个echo 服务。端口分别是6688和6689
OpenFeign
maven 配置
<dependencies><!-- 引入 SpringMVC 相关依赖,并实现对其的自动配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 引入 Spring Cloud Alibaba Nacos Discovery 相关依赖,将 Nacos 作为注册中心,并实现对其的自动配置 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- 引入 Spring Cloud OpenFeign 相关依赖,使用 OpenFeign 提供声明式调用,并实现对其的自动配置 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency></dependencies>
由于OpenFeign内置了对Ribbon的支持,所以它包含了Ribbon的依赖引用
application.yaml
server:port: 28080 # 服务器端口。默认为 8080spring:application:name: openfeign-echo-service # Spring 应用名cloud:nacos:# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类discovery:server-addr: 127.0.0.1:8848 # Nacos 服务器地址
service
@FeignClient(name = "nacos-echo-service")public interface EchoOpenFeignService {@GetMapping("/echo")String echo(@RequestParam("s") String s);}
controller
@RestControllerpublic class EchoOpenFeignController {@Autowiredprivate EchoOpenFeignService echoOpenFeignService;@GetMapping("/echo")public String feignEcho(String s) {// 使用 Feign 调用接口String response = echoOpenFeignService.echo(s);// 返回结果return "openfeign:" + response;}}
在启动类增加 @EnableFeignClients 注解,声明开启 Feign 客户端的功能。
@SpringBootApplication@EnableFeignClientspublic class OpenfeignEchoApplication {public static void main(String[] args) {SpringApplication.run(OpenfeignEchoApplication.class,args);}}
验证服务 http://localhost:28080/echo?s=test
RequestParam.value() was empty on parameter 0)
https://github.com/spring-cloud/spring-cloud-openfeign/issues/178
https://blog.csdn.net/qq_38425719/article/details/104558938
https://stackoverflow.com/questions/44313482/feign-client-with-spring-boot-requestparam-value-was-empty-on-parameter-0
