![深入理解Spring Cloud与实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/869/41202869/b_41202869.jpg)
2.3 使用Netflix Eureka替换Alibaba Nacos注册中心
Eureka是Netflix开源的一款注册中心中间件,其架构如图2-10所示。
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_56_4.jpg?sign=1739637918-SaJ3jD197O4W7hMTKJoZZ4BItqwN8qyZ-0-89dfc3fcd4611ac1c298761eeffdffd7)
图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启动类:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_57_1.jpg?sign=1739637918-Ps2R7dJezbIPfdcu26HirslGJkd4n7ZL-0-61607d2714558f54e736cf501b4e303d)
application.properties配置文件如下:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_58_1.jpg?sign=1739637918-5fdDeFInfXFS7cpquIHQEiCw8nmhl56g-0-c960084c34be2f965e68e87ace4d3be3)
启动 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配置文件内容如下:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_58_2.jpg?sign=1739637918-GH6s4zCHJhAszyIYaqXxYK0opSXti0q1-0-33e125fa2c520bc307e57910de0e4d8e)
启动EurekaProvider后在控制台可以发现成功注册到Eureka的日志:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_58_3.jpg?sign=1739637918-h89SDY9aDVPIQyB187z6wgqw38uAWEjK-0-dfa89462401390d766234d388763fd5b)
在Eureka控制台上也可以看到服务注册成功的信息,如图2-11所示。
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_59_1.jpg?sign=1739637918-gmuY8IiZr4TbVkPoC74mls5d5wXm2xW9-0-288c85c17250492b50f1403d9e6c3ea7)
图2-11
2.3.3 启动Nacos Discovery Consumer进行服务发现
同样,在Java工程脚手架上选择Eureka Discovery Client和Spring Web模块,创建spring-cloud-alibaba-eureka-consumer项目。
新建EurekaConsumer启动类的代码跟NacosConsumer相同,在此不再重复解释。
EurekaConsumer的application.properties配置文件内容如下:
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_59_2.jpg?sign=1739637918-DfdkOC7SxxiS1QUrJNu2hY4Pu42E3ltq-0-a7d70be83509ee27a39d00481ab22485)
启动EurekaConsumer后访问http://ip:port/8081/info和http://ip:port/8081/hello,返回的内容也是一样的。
对比 NacosProvider 和 EurekaProvider,以及NacosConsumer 和 EurekaConsumer,可以发现它们的代码没有任何差异,两者唯一的区别在pom依赖和配置内容上,如表2-1所示。
表2-1
![](https://epubservercos.yuewen.com/8E18D1/21440186401518706/epubprivate/OEBPS/Images/39973_60_1.jpg?sign=1739637918-d0yqa59V4OSrPJqDlWEES3zzQ89OKQ8K-0-a9f23c0dd3e1381f23d97532e80aceea)
从表2-1可以看出,如果注册中心从Netflix Eureka切换到Alibaba Nacos,只需要修改maven依赖和配置即可,无须修改任何代码。这是Spring Cloud统一服务注册/发现编程模型的好处。下面深入讲解Spring Cloud服务注册/发现的编程模型。