大家好,欢迎来到IT知识分享网。
基于Feign远程调用
Feign说明
Feign是一个声明式的http客户端,其作用是帮助我们优雅的实现http请求的发送
官网地址:https://github.com/OpenFeign/feign
Feign的使用
- 修改服务的pom.xml文件添加Feign依赖
<!--feign客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 找到该服务的启动类添加注解开启Feign的功能
@EnableFeignClients/*开启Feign的功能*/
- 新建Feign客户端包clients,在这个包新建一个接口UserClient用来进行远程调用
@FeignClient("userservice")/*指定服务的名称*/
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);/*从路径获得的参数需要加上@PathVariable注解*/
}
- 在service中调用远程服务(RestTemplate和Feign只能使用其中一个)
@Autowired
private OrderMapper orderMapper;
@Autowired
private UserClient userClient;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.使用Feign远程调用
User user = userClient.findById(order.getUserId());
// 3.封装user到order
order.setUser(user);
// 4.返回
return order;
}
- 修改本服务的名称为原服务名称-abc
orderservice-abc
自定义Feign配置
- 配置Feign日志–配置文件方式
在application.yml文中添加以下内容:
feign:
client:
config:
default: #这里用default就是全局配置,如果写某个服务名称,则针对某个微服务生效
loggerLevel: FULL
- 配置Feign日志–java代码的方式
- 首先创建一个Feign配置类FeignClientConfiguration,编写方法
public class FeignClientConfiguration {
@Bean
public Logger.Level logLevel(){
return Logger.Level.BASIC; //设置全局日志等级,调试错误时可以使用FULL,平时不建议使用,因为会消耗性能,BASIC和NONE建议使用
}
}
- 是配置类全局生效:在启动类上修改注解@EnableFeignClients指定默认的Feign配置为我们创建的Feign配置
@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
Feign的性能优化
- 在pom.xml中引入依赖
<!--httpClient的依赖-->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>
- 在application.yml配置文件中添加以下内容
feign:
httpclient:
enabled: true #开启feign对HttpClient的支持
max-connections: 200 #最大连接数
max-connections-per-route: 50 #每个路径的最大连接数
Feign最佳实践
1.创建一个module,命名为feign-api,然后引入feign的starter依赖
<!--feign客户端依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.将order-service中编写的UserClient、User、FeignConfiguration都复制到feign-api项目中
3.在order-service中引入feign-api的依赖
<!--引入feign的统一API(自己创建的模块)-->
<dependency>
<groupId>cn.itcast.demo</groupId>
<artifactId>feign-api</artifactId>
<version>1.0</version>
</dependency>
4.修改order-service中的所有上述三个组件有关的import部分,改成导入feign-api中的包
5.当定义的FeignClient不在SpringBootApplication的扫描包范围时,这些FeignClient无法使用。有两种解决方法
方法一在启动类添加注解指定FeignClient所在包:
@EnableFeignClients(basePackages = "cn.itcast.feign.clients")/*开启Feign的功能*/
方法一在启动类添加注解指定FeignClient字节码:
@EnableFeignClients(clients = {
UserClient.class})/*开启Feign的功能*/
6.重启测试
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/23796.html