0
点赞
收藏
分享

微信扫一扫

Feign的使用

1.http客户端Feign

RestTemplate方式调用存在的问题

e/user/" + order. getUserId(); 
User user = restTemp1ate.getForObject(ur1, User. class);

2.Feign的介绍

Efiü: https://github.com/OpenFeign/feign 
Feign makes writing java http clients easier 
(litter i0in 0 PASSED 
maven central Il 
Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.O, and WebSocket. Feign's first goal was 
reducing the complexity of binding Denominator uniformly to HTTP APIs regardless of ReSTfulness.

3.定义使用Feign客户端

<groupld.org . springframework . cloud< / groupld> 
starter-openfeign</artifactld> 
@SpringB00tAppIication 
public class OrderAppIication 
public static void args) { 
SpringApp1ication. run (OrderAppLication. class , 
args) ;

 

public interface UserC1ient { 
User Long id); 
AEßZfi: userservice 
• iå*fiit: GET 
• MEG: /user/{id) 
• Msn: Long id 
• User

 

@Autowired 
private UserCIient userCIient; 
public Order queryOrderById(Long orderld) { 
= orderMapper.findById(orderId); 
Order order 
// 2. f///{/FeignQ&'httpiå>ß, 
User user 
// 3. frkuser9/J0rder 
order. setUser(user) ; 
// 4. BPI 
return order;

总结

Feign的使用_Feign的使用_02

 

4.Feign的自定义配置
未命名图片.png, feign.Logger.Level 
feign. codec.Decoder 
feign.codec.Encoder 
feign. Contract 
feign. Retryer 
NONES BASIC* HEADERS, FULL 
NESpringMVCfi;N$  
(1)实现自定义修改的两种方式
未命名图片.png, hit—: gemi#fiit 
feign : 
client: 
config : 
17Ææs•sgn 
default: 
loggerLevet: FULL # 
feign : 
client : 
config : 
userservice: 
ØÆÆ5ÆS-gn, 
loggerLevet: FULL # E,æQB/J  
未命名图片.png, javaftßhit, 
public class FeignCIientConfiguration { 
@Bean 
public Logger. Level 
return Logger . Level.BASIC; 
@Enab1eFeignCtients (defaultconfiguration 
= FeignC1ientConfiguration .class) 
= "userservxce•• , 
configuration : FeignCtientConfiguration . class)  
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图


未命名图片.png, javaftßhit, 
public class FeignCIientConfiguration { 
@Bean 
public Logger. Level 
return Logger . Level.BASIC; 
@Enab1eFeignCtients (defaultconfiguration 
= FeignC1ientConfiguration .class) 
= "userservxce•• , 
configuration : FeignCtientConfiguration . class)  
注意:注意全局注解和局部注解的配置区别,分别在不同的配置类中进行声明
总结
未命名图片.png, FeignËjaË6dN: 
feign.cIient.config.xxx.IoggerLeveI  
调试错误是可以使用 FULL 日志级别 
日常开发可以使用 BASIC 日志级别
记录日志也会消耗一定性能

墨迹绘图
墨迹绘图


5.Feign的性能优化
未命名图片.png, Feign 底 层 的 客 户 端 实 现 : 
URLConnection: 默 认 实 现 , 不 支 持 连 接 池 
. »qpache HttpClient : 支 持 连 接 池 
OKHttp : 支 持 连 接 池 
因 此 提 高 Feign 的 性 能 主 要 手 段 就 是 使 用 连 接 池 代 替 默 认 的 URLConnection 。  
(1)性能优化—连接池配置
未命名图片.png, <!--httpCtient99ÉtØ 
<dependency> 
github . openfeign</groupld> 
<artifactld>feign-httpctient</artifactld> 
</dependencp 
feign : 
client : 
config: 
default : 
loggerLevet 
: BASIC # 
httpclient : 
enabled: true 
max -connections . 
• 260 # R*99i$ÆZt 
max-connections-per-route: 5@  

总结
未命名图片.png, FeignfiVt%: 
O SIÀfeign-httpClient4üü 
@ EHÑ#HEhttpClientlhfiE, 
2.  
墨迹绘图
墨迹绘图
如果不设置,可能会出现所有请求占有一个路径


未命名图片.png, FeignfiVt%: 
O SIÀfeign-httpClient4üü 
@ EHÑ#HEhttpClientlhfiE, 
2.


6.Feign最佳实现
未命名图片.png, hit— 
public interface UserAPI{ 
User Long id) ; 
= "userservice") 
public interface User-Client extends UserAPI{} 
@RestContr01ter 
public class UserControLIer implements UserAPI{  
使用继承的方式产生的问题:会造成紧耦合,父接口改变,其下子类也会改变。而且这种继承方案对springMVC不起作用,方法参数继承不下来
好处:面向契约编程,企业也有使用

未命名图片.png, fritz (fin) : 
feign-api 
UserC1ient 
User 
DefaultConfig 
order-service 
pay-service 
user-service 
UserControIter  
这种方法的耦合度相对较低些

(1)抽取式FeignClient的实现方式
未命名图片.png, 2. 
3. 
4. 
5. 
$€hfeign-api, 
User. 
Gorder-service#GlÄfeign-apifi4Nft  
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图
墨迹绘图


未命名图片.png, 2. 
3. 
4. 
5. 
$€hfeign-api, 
User. 
Gorder-service#GlÄfeign-apifi4Nft  
产生的问题定义的FeignClient无法被springMVC扫描,
UserClient' that could not be found.

解决方案:
未命名图片.png, fiit—: 
= "cn .itcast.feign.ctients") 
fritz: 
= {UserC1ient. class})  

总结
未命名图片.png, @ 8FeignClient, POJO*  

未命名图片.png, FeignC1ientFfiGfi@


举报

相关推荐

0 条评论