首先发表一下操蛋的心情,之前feign调用的并发调用问题,通过参考网上文档和之前的项目做了一些配置,当时测试没有问题,可以这两天又出现了这个问题。之前在处理这个问题的时候就对Feign不懂,多种多样的配置,hystrix配置、隔离模式等等都是懵逼的,本来想着解决了就算了,万万没想到又遇到了。于是决定再战"并发调用Feign时出现的问题",本次目标是彻底搞定它。
本次决定用Debug源码的方式学习,在Debug之前首先需要定位目标。定义过一个问题清单围绕这些问题进行一步一步的Debug。一定要彻底搞懂呀,脑瓜子疼~~。有点偏向日记了,正经人谁写日记,谁把心里话写道日记里~~,你会么。我不会。
问题清单
feign是做什么的?
hystrix是做什么的?
什么执行流程?
有哪些配置?
针对这个问题需要怎么配置?
~~~ 留空 ~~~ 指向另一篇记录技术型文档的链接来回答 前面两个问题和总结执行流程。
Debug开始
环境的配置就不说了直接从Debug的起点开始。随便整个Feign 然后断点打在rangeAll()函数,一路执行。
@FeignClient(name = "nsrep-new-res")
public interface NewResFeign {
@GetMapping("/ranges/all")
String rangeAll();
}
@SpringBootTest
public class TestC {
@Resource
private NewResFeign newResFeign;
@Test
public void t1(){
String s = newResFeign.rangeAll();
System.out.println(s);
}
}
已经结束~。又放弃了一次学习源码的机会。
首先这个问题一开始考虑的思路就有问题。信号量获取不到。可以不用hystrix 不用熔断呀。
配置 ·网飞/海斯特里克斯 维基 ·吉特哈布 (github.com)
没想到呀,没想到,你小子浓眉大眼的竟然干出这种事~~。
本以为看官方配置,把自己服务的feign的信号量调大之后就可以了。结果还是不行~~。
突然想到了一个问题,为什么会触发CallBack的操作,先定义一下角色 我的服务是B,其他人的服务是A , 是A服务通过Feign调用B服务,出现了“没有获取到信号量”,之前认为这个信号量是B服务控制的然后A服务进行获取。今天才感觉应该是 A服务Feign的信号量不足,导致出现这个问题。之前一直没有想过这个问题。
其实就是思路错了,加上确实不了解。主要没有理解到 消费方 和 提供方的关系。简单画个图理一下思路。

用户请求A服务,然后通过FeignClient 请求B服务。 FeignClient 去请求B服务之前会先去“信号量池”获取信号量,获取到了才会去调用。否则就走CallBack路线给用户报错。
图化的有问题,大概理解就可以。以上是Feign + Hystrix 的情况,并且隔离策略选用的是 信号量的方式。
主要报错有误导性,报错是 Feign Client B Callback 也就是请求B服务出现了问题,所以前面一直意味是 B服务的问题
以上思路还待测试。如果有问题我会在回来的
4637

被折叠的 条评论
为什么被折叠?



