欢迎您访问 南京某某电缆桥架有限公司官方网站

公司简介 联系我们

欢迎来电咨询

0939-24317463

新闻资讯

全国服务热线

0939-24317463

技术过硬,据实报价

新闻动态

当前位置:主页 > 新闻资讯 > 新闻动态 >

微服务中feign的@FeignClient应该写在那里?

2021-05-16 00:44 已有人浏览
本文摘要:前言最近项目组拿了友商的springcloud alibaba项目来举行革新,在翻阅他们的代码时候,发现他们把@FeignClient写在服务提供方的API上,他们这样的写法乐成的引起我的注意,于是抱着勤学的心态请教友商的开发人员,于是一篇水文就这么降生了友商开发人员解惑友商服务提供方的API形如下@FeignClient(name = feign-provider,path = UserService.INTER_NAME,contextId = user)public

推荐几个体彩外围app

前言最近项目组拿了友商的springcloud alibaba项目来举行革新,在翻阅他们的代码时候,发现他们把@FeignClient写在服务提供方的API上,他们这样的写法乐成的引起我的注意,于是抱着勤学的心态请教友商的开发人员,于是一篇水文就这么降生了友商开发人员解惑友商服务提供方的API形如下@FeignClient(name = "feign-provider",path = UserService.INTER_NAME,contextId = "user")public interface UserService { String INTER_NAME = "user"; @GetMapping(value = "/{id}") UserDTO getUserById(@PathVariable("id") Long id);}我过往的履历是@FeignClient是写在消费端上,就是在消费端上会写一个接口继续服务端API接口,再打上@FeignClient,并指明fallback,形如下@FeignClient(name = "feign-provider",path = UserService.INTER_NAME,contextId = "user",fallback = UserServiceClientFallBack.class)public interface UserServiceClient extends UserService {}我将我过往的写法告诉友商开发人员,友商的开发人员对我说,你消费端还要自己写接口啊,那么贫苦。我们这种写法,消费端仅需pom文件引入API包,在挪用方上打个 @Autowired标注,就可以挪用服务提供方的接口。额,他们的说法真的很有原理,惋惜没说服我,于是我抛出第二个问题,你们直接把@FeignClient写在服务提供方的API上,那如果消费端要举行熔断降级,要怎么做?友商给我谜底是用sentinel啊,直接在sentinel的控制面板上设置熔断降级计谋,形如下触发的效果形如下看着已经实现了熔断的效果,可是我这种效果还不是我想要的,于是我又问,如果在面板上举行熔断后,我要记载熔断日志,该怎么做?友商给我的谜底是这时候你就得接纳漫衍式链路追踪组件啊好比skywalking,横竖你记载日志,不也是为了排盘问题利便,要明白变通。

额,好吧,最后我再抛出一个问题,既然你们直接把@FeignClient写在服务提供方的API上,那如果消费端想直连某台服务提供方举行当地联调,那要怎么做?友商的回覆是他们开发的时候不会有这种场景,大家都是直连开发情况联调如果是我来实现,我会把@FeignClient写在那里?毋庸置疑的,我会把@FeignClient写在消费端上,因为从职责上,只有消费端才气明确知道自己要挪用哪个服务提供方,好比直连哪个服务提供方举行调试,如果直接把@FeignClient写在服务提供方的API上,消费端就很难按需定制。其次因为自己对sentinel也停留在听说过,也没实际用过,也是因为这次友商的项目了用springcloud alibaba的全家桶,才接触了下。

后面在和友商讨论@FeignClient的放置问题后,回来在实验了一把,发现友商说的在sentinel设置熔断降级不全面,因为我后边实验让服务提供方超时或者报错,此时会见页面就会泛起和后边我就按自己的想法,在消费端上会写一个接口继续服务端API接口,再打上@FeignClient,并指明fallback,形如下@FeignClient(name = "feign-provider",path = UserService.INTER_NAME,contextId = "user",fallback = UserServiceClientFallBack.class)public interface UserServiceClient extends UserService {}@Component@Slf4jpublic class UserServiceClientFallBack implements UserServiceClient{ @Override public UserDTO getUserById(Long id) { log.info("id:{} fallback",id); return UserDTO.builder().id(id).userName("fallback").build(); }}在application.yml激活sentinel对feign的支持feign: sentinel: enabled: true此时让服务提供方超时或者报错,再会见页面同时控制台打印出熔断日志总结写这篇文章的目的,并不是要反驳说@FeignClient写在服务提供方API的就是错的,小我私家是以为脱离业务场景,来谈技术就是在耍流氓,究竟友商他们自己那么用,也没出大问题,就说明他们当前的写法是满足他们业务需求。最后我往返答一下,springcloud中feign的@FeignClient应该写在那里,就我小我私家而言,我还是倾向写在消费端上,而非服务提供方的API上。


本文关键词:微,服务,中,feign,的,@FeignClient,应该,写,推荐几个体彩外围app,在那里

本文来源:推荐几个体彩外围app-www.ccjiugui.com

与微服务中feign的@FeignClient应该写在那里?相关的其他内容