RibbonController的实现原理?
来源:9-21 编写 Ribbon 应用 Controller

慕运维041575
2020-02-16
RibbonController 中的 getTemplateInfo 方法怎么看出来走了Ribbon呢?
infoUrl中的地址是怎样最终找到真正的微服务呢?
写回答
1回答
-
张勤一
2020-02-16
同学你好:
你这里提出的两个问题是与 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 群随时交流、讨论,也非常感谢同学的支持!
252020-02-18
相似问题