【Spring Cloud】一个Demo告诉你Feign怎么使用
上一篇我们介绍了《常用的Ribbon配置》,今天我们来介绍一下另一个非常有用的组件,它就是Feign。Feign作为一个声明式的 web service 客户端,它的主要作用就是简化服务之间的调用。
我们用一个简单的例子来说明讲解:
创建公共接口子 Module
这个module的主要作用,就是提供一个协议,服务提供者和消费者之间远程交互的调用协议。
pom 导包
采用最小原则导包,不要引入不需要的依赖。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
定义接口层
定义接口,并添加注解 FeignClient。注意注解的value 为提供远程服务的服务提供者的名字。
@FeignClient("feign-client")
public interface IService {
@GetMapping("/sayHi")
public String sayHi();
}
创建 服务提供者 子 Module
这个module的主要作用,就是对外提供服务,供服务消费者远程调用。
pom文件配置
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--上面定义的接口module-->
<dependency>
<groupId>com.jhj</groupId>
<artifactId>feign-client-intf</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
添加配置文件
application.properties 中添加如下配置:
spring.application.name=feign-client
server.port=40006
eureka.client.serviceUrl.defaultZone=http://localhost:20000/eureka/
实现对外提供的服务
@RestController
@Slf4j
public class Controller implements IService {
@Value("${server.port}")
private String port;
@Override
public String sayHi() {
return "This is " + port;
}
}
实现启动类
注意这个类作为服务提供者,不需要添加注解 EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class FeignClientApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(FeignClientApplication.class)
.web(WebApplicationType.SERVLET)
.run(args);
}
}
启动该服务,等待消费者调用。
创建 服务消费者
这个module的主要作用,就是对前面创建的服务消费者,发起远程调用。测试整个链路是否是通的。
pom 导包
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--上面定义的接口module-->
<dependency>
<groupId>com.jhj</groupId>
<artifactId>feign-client-intf</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
配置文件
application.properties 中添加如下配置:
spring.application.name=feign-consumer-advanced
server.port=40001
spring.main.allow-bean-definition-overriding=true
eureka.client.serviceUrl.defaultZone=http://localhost:20000/eureka/
# 以下配置可选
# 每台机器最大重试次数
feign-client.ribbon.MaxAutoRetries=2
# 可以再重试几台机器
feign-client.ribbon.MaxAutoRetriesNextServer=2
# 连接超时
feign-client.ribbon.ConnectTimeout=1000
# 业务处理超时
feign-client.ribbon.ReadTimeout=2000
# 在所有HTTP Method进行重试
feign-client.ribbon.OkToRetryOnAllOperations=true
实现消费者控制器
实现对服务提供者的远程调用
@RestController
@Slf4j
public class Controller {
@Autowired
private IService service;
@GetMapping("/sayHi")
public String sayHi() {
return service.sayHi();
}
}
实现启动类
注意这个类作为服务消费者,需要添加注解 EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class FeingConsumerApp {
public static void main(String[] args) {
new SpringApplicationBuilder(FeingConsumerApp.class)
.web(WebApplicationType.SERVLET)
.run(args);
}
}
启动该服务消费者,可以看到服务正常启动,并成功挂载到注册中心。
联调
发起远程调用,成功返回服务提供者的端口号40006。
总结
本文简单介绍了 Feign,并以一个例子介绍了 Feign 的使用方式和配置。
原文链接:https://piterjia.github.io/2020/06/08/micro-service-feign-introduce/
版权声明:
作者:Miigua
链接:https://www.miigua.com/article/313.html
来源:米瓜的博客
文章版权归作者所有,未经允许请勿转载。
全部评论