请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

RibbonController的实现原理?

RibbonController 中的 getTemplateInfo 方法怎么看出来走了Ribbon呢?
infoUrl中的地址是怎样最终找到真正的微服务呢?

正在回答 回答被采纳积分+3

1回答

张勤一 2020-02-16 18:32:39

同学你好:

    你这里提出的两个问题是与 Ribbon 相关的,我来依次对它们进行解答。

    1. RibbonController 中的 getTemplateInfo 方法怎么看出来走了Ribbon呢?

其实可以看到,在 RibbonController 中首先注入了 RestTemplate,这其实是使用 Ribbon 的 “标志”,因为 Ribbon 使用 HTTP 服务。另外,在运行微服务并调用接口的时候,其实也会打印 Ribbon 相关的日志的(更明显的是,在调用服务的时候,使用了 Eureka Client Name,这也是 SpringCloud 框架使用 Ribbon 的 “证明”)。


    2. infoUrl中的地址是怎样最终找到真正的微服务呢?    

    这里最核心的是 infoUrl 的定义,如下所示:

String infoUrl = "http://eureka-client-coupon-template/coupon-template/info";

    可以看到,这里指出了 EurekaClient 的 Name,Ribbon 在找微服务的时候,首先会访问 Eureka Server,确定 EurekaClient 是否存在,并获取到 EurekaClient 的访问地址。最后,再根据 uri 的声明访问微服务的具体服务接口,并返回响应。


    欢迎来 QQ 群随时交流、讨论,也非常感谢同学的支持!

2 回复 有任何疑惑可以回复我~
  • 提问者 慕运维041575 #1
    Ribbon是从eureka中发现了template的ip:port吗?
    feign也是从这样的吗?
    这两种有什么区别呢?可以结合在一起吗?
    回复 有任何疑惑可以回复我~ 2020-02-16 20:12:36
  • 张勤一 回复 提问者 慕运维041575 #2
    Ribbon 是从 Eureka 中发现 Template 服务的 ip 和 port;Feign 是基于 Ribbon 封装的,底层实现就是 Ribbon,只是换了一种不一样的使用方式。
    回复 有任何疑惑可以回复我~ 2020-02-16 20:23:42
  • 提问者 慕运维041575 回复 张勤一 #3
    那一般情况下还会存在直接使用Ribbon的情况吗?
    Hystrix好像自定义熔断策略,比如指定时间端失败率,这个在课程的例子中怎么实现呢?
    回复 有任何疑惑可以回复我~ 2020-02-18 18:04:01
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信