SpringCloud Alibaba微服务实战三十六 - 使用Feign的一些问题以及如何解决?

在SpringCloud架构体系中,微服务间的通信是基于Feign调用。而在实际使用Feign的过程中我们大概率会面临下面几个问题:

  • Feign客户端放在消费端还是独立一个api层?

  • Feign调用的接口如何要不要进行包装?

  • Feign如何抓取业务生产端的业务异常?

这篇文章我们就来一起探讨一下这几个问题,希望看完能对你有所帮助。

首先我们先看看Feign的调用方式如何抉择?

Feign的调用方式如何选择?

总体来说,Feign的调用方式分为两大类:

32153927821c302fa730bfb0c0adc85b.png

在消费端声明Feign客户端

c7c176c2d30ff0223077082dee93457f.png

还是需要独立一个公共的API接口层,生产端消费端都需要引入此jar包,同时在消费端按需编写Feign客户端及熔断类。

37922f77ff7c21448b5eb43d1e75c7d4.png

0f16e836f0143893c9f90842cbacbf90.png

f46b3d3eee48682cf56f0e2cc9ba0970.png

371db270eb8404e8cade9c2a8e2e6e75.png

优化包装

这样丑陋的代码我们当然需要进行优化,优化的目标也很明确:当我们通过Feign调用时,直接获取到实体对象,不需要额外的解装。而前端通过网关直接调用时,返回统一的包装体。

这里我们可以借助ResponseBodyAdvice来实现,通过对Controller返回体进行增强,如果识别到是Feign的调用就直接返回对象,否则给我们加上统一包装结构。

c4d36e977f4dfe3f1b72478417b9ab9b.png

  1. 在feign拦截器中给feign请求添加特定请求头T_REQUEST_ID

0dbe44d5da91271e1f0a20591391753d.png

  1. 自定义BaseResponseAdvice并实现ResponseBodyAdvice

05cbc69a598be6332a83a9680622fc8f.png

132ba5cc03897ab28c4dea31d6c5c75a.png

190fb3e880a948feb52c278d970054f2.png

06d92d19f62a995d049f4e6aee2b89a7.png

359329146a96eafaeb65f3d521d4aa45.png

5ad61e9d083da47066070bc5e51718a3.png

7d1baf042641adb81a2e0a032848a1ed.png

2342ac9b528683b477e60e3dad5ccb62.png

5f19246b00f0d0c07b4c967043c85230.png

1f0bdf41b76a674d4494411d2801b9f9.png

02aee0504019fa9f21f75ee11876e865.png

e6a13327a4470bda5139afece88deb4a.png

0044b2fe611ed79f79ac3d1d1b34539e.png

1085b401a2be2b39f16802850ef36c7b.png

总结

本文对Feign在使用过程中会遇到的问题做了个小小的总结,也提出了自己可能不太成熟的解决方案。

506d24dfd0d0d6cd6f187d598c73ce0c.png

烧脑?放松一下,听下音乐吧

51e119375d07fe86c6ccc0e23c7268f5.png

点击下方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值