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