简介:java系列技术分享(持续更新中…)
初衷:一起学习、一起进步、坚持不懈
如果文章内容有误与您的想法不一致,欢迎大家在评论区指正
希望这篇文章对你有所帮助,欢迎点赞 收藏 ⭐留言更多文章请点击
Feign官网
:https://github.com/OpenFeign/feign
Fegin是声明式、模块化的Http客户端,可以帮助我们快捷优雅的调用HTTP接口。在SpringCloud中可以很方便的创建一个Feign客户端,只需声明一个接口,并加上对应的注解就能完成对HTTP接口的调用。
可读性差,参数复杂难以维护
//2远程查询用户信息
String url="http://provider-server/provider/"+order.getUserId();
//3. 发起调用
User user = restTemplate.getForObject(url, User.class);
在服务消费者端添加如下
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>
在启动类或者配置类添加
@EnableFeignClients
@FeignClient("provider-server")
public interface ProviderServeClient {
/**
* 根据id查询用户信息
*/
@GetMapping("/provider/{id}")
User queryById(@PathVariable("id") Long id);
}
provider-server
/provider/{id}
GET
Long id
User
@Autowired
private ProviderServeClient providerServeClient;
/**
* 根据id查询订单并返回
*/
@Override
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
//2远程查询用户信息
// String url="http://provider-server/provider/"+order.getUserId();
//2. 发起调用
// User user = restTemplate.getForObject(url, User.class);
User user = providerServeClient.queryById(order.getUserId());
//3. 存入order
order.setUser(user);
// 4.返回
return order;
}
1. NONE: 不记录任何日志信息,默认值
2. BASIC: 仅记录请求的方法,URL以及响应状态码和执行时间
3. HEADERS: 在BASIC的基础上,增加了请求和响应头信息
4. FULL: 记录所有请求和响应的明细,包括头信息,请求体,元数据
方式一
: 配置文件方式
全局配置
feign:
client:
config:
default: # 全局的配置
loggerLevel: BASIC
局部配置
feign:
client:
config:
provider-server: # 写服务名称,则针对某个微服务的配置
loggerLevel: FULL
方式二:
java代码方式
public class FeignClientConfiguration {
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC;
}
}
全局配置
,添加到@EnableFeignClients注解中@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
局部配置
,添加到服务对应的@FeignClient注解中@FeignClient(value = "provider-server",configuration = FeignClientConfiguration.class)
Feign底层的客户端实现:
BASIC
或者NONE
引入依赖
<dependency>
<groupId>io.github.openfeigngroupId>
<artifactId>feign-httpclientartifactId>
dependency>
配置连接池
httpclient:
enabled: true # 开启feign对HttpClient的支持
max-connections: 200 # 最大的连接数
max-connections-per-route: 30 # 每个路径的最大连接数
继承方式,给消费者的FeginClient和提供者的controller定义统一的父接口(不推荐
)
缺点:
模块抽-----取将FeignClient抽取为独立模块,并把所有接口有关的配置都放到这个模块中,提供给所有消费者使用,这样就不用每个消费者都定义自己的Feign客户端,避免重复开发
抽取启动可能会报错如下:
ProviderServeClient没有找到
Description:
Field providerServeClient in com.xing.service.impl.ConsumerServiceImpl required a bean of type 'com.api.clients.ProviderServeClient' that could not be found.
The injection point has the following annotations:
- @org.springframework.beans.factory.annotation.Autowired(required=true)
原因:
package com.xing
package com.api;
ProviderServeClient没有找到
解决方案:
@EnableFeignClients(basePackages = "com.api")
@EnableFeignClients(clients = {ProviderServeClient.class})