分别用Eureka、Nacos实现服务注册和服务发现小demo总结
一、远程调用
1、使用RestTemplate
- 在启动类中注册RestTemplate
- 实现远程调用
2、Eureka
问题1:消费者如何得知生产者实例地址?
获取地址信息的流程如下:
- 生产者服务实例启动后,将自己的信息注册到eureka-server(Eureka服务端)。这个叫服务注册
- eureka-server保存服务名称到服务实例地址列表的映射关系
- 消费者根据服务名称,拉取实例地址列表。这个叫服务发现或服务拉取
问题2:消费者如何从多个生产者实例中选择具体的实例?
- 消费者从实例列表中利用负载均衡算法选中一个实例地址
- 向该实例地址发起远程调用
问题3:消费者如何得知某个生产者实例是否依然健康,是不是已经宕机?
-生产者会每隔一段时间(默认30秒)向eureka-server发起请求,报告自己状态,称为心跳
- 当超过一定时间没有发送心跳时,eureka-server会认为微服务实例故障,将该实例从服务列表中剔除
- 消费者拉取服务时,就能将故障实例排除了
3、Nacos
名词概念:
namespace:命名空间。作用是服务隔离,处在不同的namespace下的服务是无法访问的。
cluster:集群。Nacos将同一机房内的实例划分为一个集群。一个服务可以包含多个集群,每个集群下可以有多个实例。
- Nacos与eureka的共同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
- Nacos与Eureka的区别
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式