2.3 使用Netflix Eureka替换Alibaba Nacos注册中心
Eureka是Netflix开源的一款注册中心中间件,其架构如图2-10所示。
图2-10
建议将Eureka Server集群分别部署在不同的可用区,达到高可用的效果。us-east-1c、us-east-1d及us-east-1e分别表示us-east区下的3个不同可用区。使用Eureka Client客户端启动该应用后会发请求给 Eureka Server 进行注册,后续发送“心跳”进行续约(renew)。客户端也可以发起取消(cancel)进行服务下线、获取(get)服务信息等请求。Eureka Server 集群内的各个实例会进行数据复制,确保数据的一致性。
在此不推荐继续使用Netflix Eureka作为注册中心,其原因有以下3点:
·在2019年巴塞罗那Spring I/O大会和奥斯汀Spring One Platform大会上,Spring团队都有一个主题为“How to live in a post Spring Cloud Netflix world”的环节来讲解Spring Cloud Netflix进入维护模式后使用其他Spring Cloud实现代替Netflix的解决方案。
·Eureka 2.0已经停止开发。Eureka 1.x架构存在问题,比如,客户端采用pull模式拉取服务数据时,导致实时性不足和无谓的拉取性能消耗的问题;Eureka集群的每一个实例都可以接受客户端的写请求,并且各个实例会进行数据复制,从而导致一些性能问题。
·其他注册中心如Alibaba Nacos、HaShicorp Consul等一直在发展,差距会越来越大。
2.3.1 启动Eureka Server
Eureka Server与 Spring体系进行了非常好的整合,一个 Spring Boot应用引入对应的依赖后就代表一个 Eureka Server。在 Java 工程脚手架上选择 Eureka Server,并创建 spring-cloud-netflix-eureka-server项目。
新建EurekaServerApplication启动类:
application.properties配置文件如下:
启动 EurekaServerApplication 后,进入 http://localhost:8761,确认 Eureka Server 启动成功。
2.3.2 启动Eureka Discovery Provider进行服务注册
在Java工程脚手架上选择Eureka Discovery Client和Spring Web模块,并创建spring-cloud-netflix-eureka-provider项目。
新建 EurekaProvider 启动类。EurekaProvider 内部的代码与 NacosProvider的代码完全一样,在此不再重复解释。
EurekaProvider的application.properties配置文件内容如下:
启动EurekaProvider后在控制台可以发现成功注册到Eureka的日志:
在Eureka控制台上也可以看到服务注册成功的信息,如图2-11所示。
图2-11
2.3.3 启动Nacos Discovery Consumer进行服务发现
同样,在Java工程脚手架上选择Eureka Discovery Client和Spring Web模块,创建spring-cloud-alibaba-eureka-consumer项目。
新建EurekaConsumer启动类的代码跟NacosConsumer相同,在此不再重复解释。
EurekaConsumer的application.properties配置文件内容如下:
启动EurekaConsumer后访问http://ip:port/8081/info和http://ip:port/8081/hello,返回的内容也是一样的。
对比 NacosProvider 和 EurekaProvider,以及NacosConsumer 和 EurekaConsumer,可以发现它们的代码没有任何差异,两者唯一的区别在pom依赖和配置内容上,如表2-1所示。
表2-1
从表2-1可以看出,如果注册中心从Netflix Eureka切换到Alibaba Nacos,只需要修改maven依赖和配置即可,无须修改任何代码。这是Spring Cloud统一服务注册/发现编程模型的好处。下面深入讲解Spring Cloud服务注册/发现的编程模型。