feign组件在spring cloud体系中主要负责方法的远程调用,有了它,调用其他应用的接口,不需要使用RestTemplate那么麻烦,在简单的配置后,可以直接将接口Autowired进来,直接调就好,很简单。这里主要讲下怎么简单的配置下feign。
- 引入依赖
部分依赖如下所示:
feign的依赖,
<!--feign-client-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
被调用方提供的接口层依赖,
<dependency>
<groupId>org.example</groupId>
<artifactId>feign-client-intf</artifactId>
<version>${project.version}</version>
</dependency>
- 启动类加入注解
为启动类加上@EnableFeignClients,
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class FeignConsumerApp {
public static void main(String[] args) {
new SpringApplicationBuilder(FeignConsumerApp.class)
.web(WebApplicationType.SERVLET)
.run(args);
}
}
- 继承被调用方接口,指定调用的服务,实现feign客户端
注意,这里的服务名,应是eureka上注册的名称
@FeignClient(name = "feign-client")
public interface MyService extends IService{
}
- 也可以加入自己需要的配置
如超时等配置,
部分配置如下所示,
spring:
main:
allow-bean-definition-overriding: true
application:
name: feign-consumer-advanced
server:
port: 40001
eureka:
client:
serviceUrl:
#注册中心地址
defaultZone: http://localhost:20000/eureka/
feign-client:
ribbon:
#每台机器最大的重试次数
MaxAutoRetries: 0
#可以再重试几台机器
MaxAutoRetriesNextServer: 1
#连接超时时间(ms)
ConnectTimeout: 1000
#业务处理超时(ms)
ReadTimeout: 2000
#在所有类型的HTTP Method进行重试
#默认为false,仅在不改动数据(查)的情况下进行重试
#为true时,要特别注意幂等问题
OkToRetryOnAllOperations: true
- 将接口注入,实现远程调用
@Autowired
private MyService myService;