没有服务注册中心之前,我们也可以进行服务间的调用,为什么还需要服务注册?
原因:主要是为了省事,当服务很多时,我们需要手动的去管理我们的代码,这样的管理是很麻烦的,我们需要一个公共组件去统一的管理服务,监控服务运行状态等等操作,来简化我们的工作。
Eureka
注册中心服务端(Eureka Server):
服务注册:
服务提供者启动时,会通过 Eureka Client 向 Eureka Server 注册信息,Eureka Server 会存储该服务的信息,Eureka Server 内部有二层缓存机制来维护整个注册表。
提供注册表:
服务消费者在调用服务时,如果 Eureka Client 没有缓存注册表的话,会从 Eureka Server 获取最新的注册表。Eureka Client客户端会优先从缓存中获取服务注册信息。
同步状态:
Eureka Client 通过注册、心跳机制和 Eureka Server 同步当前客户端的状态。若Eureka Server服务端(大量)90秒内未获取到Eureka Client客户端心跳,会自动进入保护机制,不再剔除客户端(少量的话剔除当前客户端操作)。
注册中心客户端(Eureka Client):
服务注册(Register):
服务的提供者,将自身注册到注册中心,服务提供者也是一个 Eureka Client。当 Eureka Client 向 Eureka Server 注册时,它提供自身的元数据,比如 IP、端口,运行状况指示符 URL,主页等等。
服务续约(Renew):
Eureka Client 会每隔 30 秒发送一次心跳来续约。通过续约来告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题。默认情况下,如果 Eureka Server 在 90 秒内没有收到 Eureka Client 的续约,Server 端会将实例从其注册表中删除,此时间可配置,一般情况不建议更改。
服务剔除(Eviction):
当 Eureka Client 和 Eureka Server 不再有心跳时,Eureka Server 会将该服务实例从服务注册列表中删除,即服务剔除。
总之一句话来说:
Eureka Client会将自身的信息注册到Eureka Server,Eureka Server将注册的信息保存并等待Eureka Client进行拉取、更新和缓存Eureka Server的信息。
Eureka Server集群实现
集群的话我们尽量使用>=3服务器,此次学习使用俩个服务即可。
服务A:
1、引入POM文件
2、集群版Eureka服务端配置信息
若有三台服务器的话,1注册23,2注册13,3注册12。
3、监听配置文件
4、启动器配置
服务B:
步骤和服务A一样,其中配置文件修改如下:
5、集群版注册中心服务端如下:
Eureka Client集群实现
1、引入POM文件
2、集群版Eureka客户端配置信息
3、启动器配置
4、集群版注册中心如下:
代码验证:
备注:虽然我们是使用RestTemplate访问的微服务,但是也可以负载均衡的(Eureka通过HTTP访问)可以通过微服务名称,去Eureka中拿地址,达到负载均衡的效果。
访问接口返回结果:
Eureka 服务发现
通过代码获取Eureka Server的全部服务信息:
启动器配置(需要配置服务发现注解):
补充一下前面我们所讲的Eurekak Client心跳检测与续约时间的配置(一般默认即可):
目前Erueka在官网已经停止更新,但是其中的思路还是很值得我们借鉴的。后续可以使用zk、Nacos作为注册中心!