Nacos,OpenFeign,Ribbon,loadBalance如何相互协调工作

1、SpringCloud规范

对于Nacos而言其作用在于服务注册发现和配置中心,对于Ribbon而言作用在于实现实例负载均衡,对于OpenFeign而言要通过rpc实现远程调用

2、Nacos实现服务注册发现

SpringCloud提供了ServiceRegistration接口,实现服务注册功能

在这里插入图片描述对于Nacos而言只需要实现 ServiceRegistry接口 ,进行服务注册即可

服务注册时机在哪?

应该是SpringBoot启动之后,此时当前服务应该自动往Nacos服务注册中心自动注册。
通过SpringBoot的事件监听机制(ApplicationListener,ApplicationEvent)。启动之后发送事件进行触发自动注册

AutoServiceRegistration有个抽象实现AbstractAutoServiceRegistration
在这里插入图片描述
在这里插入图片描述在这里插入图片描述通过Eureka也是这个道理!

3、nacos配置中心

配置中心是通过实现ConfigService获取的,默认查本地,本地没有就拿配置中心的
在这里插入图片描述

4、Ribbon和LoadBalance负载均衡

Ribbon提供了一个获取服务实例的接口,叫ServerList,实现他即可

在这里插入图片描述通过实现类来实现自定义的负载均衡策略

随着Ribbon等组件停止维护之后,SpringCloud官方自己也搞了一个负载均衡组件loadbalancer,用来平替Ribbon。
在这里插入图片描述

5、OpenFeign (远程调用)

OpenFeign是一个rpc框架,当我们需要调用远程服务的时候,只需要声明个接口就可以远程调用了,就像下面这样

在这里插入图片描述
当调用方法的时候,会根据方法上面的参数拼接一个http请求地址,这个地址的格式是这样的http://服务名/接口路径。

比如,上面的例子,当调用saveOrder方法的时候,按照这种规律拼出的地址就是这样的 http://order/order,第一个order是服务名,第二个order是PostMapping注解上面的

问题在于:服务实例可能有多个啊??

此时负载均衡需要上场了,获取到最终的ipPort之后,就会将上面的地址进行替换,然后进行RPC

假设获取到的orde服务所在的ip和端口分别是192.168.2.100和8080,最终重构后的路径就是http://192.168.2.100:8080/order,之后OpenFeign就可以发送http请求了。

6、总结

在这里插入图片描述
原文:https://mp.weixin.qq.com/s/NKSlSfHsO-tr5UFJqRy_pQ

猜你喜欢

转载自blog.csdn.net/qq_44787816/article/details/130360741