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
└── java
11 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: 6688
spring:
application:
name: nacos-echo-service # 应用名
cloud:
nacos:
# Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
discovery:
server-addr: 127.0.0.1:8848 # Nacos 服务器地址
controller
@RestController
public 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 # 服务器端口。默认为 8080
spring:
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
@RestController
public class EchoOpenFeignController {
@Autowired
private EchoOpenFeignService echoOpenFeignService;
@GetMapping("/echo")
public String feignEcho(String s) {
// 使用 Feign 调用接口
String response = echoOpenFeignService.echo(s);
// 返回结果
return "openfeign:" + response;
}
}
在启动类增加 @EnableFeignClients 注解,声明开启 Feign 客户端的功能。
@SpringBootApplication
@EnableFeignClients
public 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