文章目录
- Eureka注册中心介绍
- 创建启动Eureka注册中心
* - 创建Eureka注册中心
- 启动Eureka注册中心
- 将Nacos服务提供者Provider注册中心改为Eureka
- 将Nacos服务消费者Consumer注册中心改为Eureka
- 通过服务消费者Consumer调用服务提供者Provider
- 总结
- github 链接
上篇文章 使用Alibaba Nacos体验第一个Spring Cloud微服务应用
本文将在上文的基础上,演示将Nacos注册中心切换到Eureka注册中心
Eureka注册中心介绍
搬运 @稀土掘金技术社区 的一张图,网上翻了翻画的基本都是这个模型
使用Eureka有三点缺点不推荐使用
- 在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 已经停止开发,1.x的架构存在问题,比如,客户端采用pull模式拉取服务数据时,导致实时性不足和无谓的拉取性能小号的问题;Eureka 集群的每一个实例都可以接受客户端的写请求,并且各个实例会进行数据复制,从而导致一些性能问题。
- 其他注册中心如Alibaba Nacos、HaShicorp Consul的社区一直在维护,差距会越来越大
Eureka集群的原理这里引用一篇其他博主的文章,本文不再多加讲解
https://blog.csdn.net/YYniannian/article/details/125678434
; 创建启动Eureka注册中心
创建Eureka注册中心
我们通过idea 新建一个Eureka Server项目
注意下图最上方的Server URL,默认的start.spring.io因为是外网,经常连接超时,我改成了https://start.aliyun.com
点击下一步,通过搜索功能添加Eureka Server,点击Finish
社区版idea不支持这个功能,这里我直接把pom.xml贴出来
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.wpxgroupId>
<artifactId>EurekaServerartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>EurekaServername>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASEspring-boot.version>
<spring-cloud.version>Hoxton.SR9spring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
<exclusions>
<exclusion>
<groupId>org.junit.vintagegroupId>
<artifactId>junit-vintage-engineartifactId>
exclusion>
exclusions>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<version>${spring-boot.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.1version>
<configuration>
<source>1.8source>
<target>1.8target>
<encoding>UTF-8encoding>
configuration>
plugin>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>2.3.7.RELEASEversion>
<configuration>
<mainClass>com.wpx.eurekaserver.EurekaServerApplicationmainClass>
configuration>
<executions>
<execution>
<id>repackageid>
<goals>
<goal>repackagegoal>
goals>
execution>
executions>
plugin>
plugins>
build>
project>
编辑启动类,这里我直接贴代码,社区办的idea生成的项目可能不包含启动类,我把项目结构也贴出来
EurekaServerApplication
package com.wpx.eurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
application.properties
应用名称
spring.application.name=EurekaServer
应用端口
server.port=8082
不想注册中心注册实例,因为该实例本身就是注册中心
eureka.client.register-with-eureka=false
不从Eureka Server 中获取实例信息
eureka.client.fetch-registry=false
项目结构
启动Eureka注册中心
在文件EurekaServerApplication上右键 Run 'EurekaServerApplication'启动服务,控制台打印以下内容即为启动成功
访问Eureka控制台 http://localhost:8082/
可以看到左下角红框选中的地方,并没有有效实例注册到注册中心,因为我们前面在配置文件中配置了eureka.client.register-with-eureka=false,所以这里不会展示我们启动的这个Eureka Server,当然如果我们想把自身注册上去,也是需要其他配置信息的,会在下面讲出来。
; 将Nacos服务提供者Provider注册中心改为Eureka
上一批文章中的NacosProvider服务,没看的同学可以大概看一眼。
我们将原本的pom.xml做一下修改
移除项
<properties>
<spring-cloud-alibaba.version>2.2.2.RELEASEspring-cloud-alibaba.version>
properties>
<dependencies>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-alibaba-dependenciesartifactId>
<version>${spring-cloud-alibaba.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
新增项
<properties>
<spring-cloud.version>Hoxton.SR9spring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
我们再将原本的application.properties做一下修改
修改前
应用名称
spring.application.name=NacosProvider
Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=localhost:8848
注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
应用服务 WEB 访问端口
server.port=8080
修改后
应用名称
spring.application.name=NacosProvider
应用服务 WEB 访问端口
server.port=8080
Eureka Server 地址信息 Eureka Server 的访问地址拼接 /eureka
eureka.client.service-url.defaultZone=http://localhost:8082/eureka
启动NacosProvider服务提供者
启动成功,显示注册到了Eureka Server,状态UP,响应码 204
我们来看一下Eureka的控制台有什么变化
有效服务注册列表多了一个NACOSPROVIDER,就是我们在服务提供者配置文件写的spring.application.name=NacosProvider,后面有服务信息
将Nacos服务消费者Consumer注册中心改为Eureka
改造内容跟改造服务提供者Provider一摸一样,启动后访问Eureka控制台
跟刚才一模一样,服务消费者并没有注册上来,因为我们在上一章创建服务消费者的时候,在启动类的的注册注解上加了一个属性
@EnableDiscoveryClient(autoRegister = false)
这个注解在Eureka上同样适用,服务启动并不会注册到Eureka Server
通过服务消费者Consumer调用服务提供者Provider
启动NacosConsumer后访问 http://127.0.0.1:8081/hello 返回内容如下
echo:nacos
访问 http://127.0.0.1:8081/info 返回内容如下
all service:[NacosProvider]
NacosConsumer instance list:
[ serviceId: NacosProvider, host: 172.16.86.2, port: 8080 ]
可以看出结果跟上一篇适用Nacos注册中心是一模一样的。
总结
对比使用Nacos的Provider和使用Eureka的Provider,以及使用Nacos的Consumer和使用Eureka的Consumer,可以发现它们的代码没有任何差异,亮着唯一的区别在于pom依赖和配置内容上,如下图表示
服务注册/发现组件maven依赖配置项与配置值Alibab Nacosspring-cloud-starter-alibaba-nacos-discoveryspring.cloud.nacos.discovery.server-addr=localhost:8848Netflix Eurekaspring-cloud-starter-netflix-eureka-clienteureka.client.service-url.defaultZone=http://localhost:8082/eureka
github 链接
Eureka分支
Eureka Server 注册中心
https://github.com/wangpengxiang1996/EurekaServer
provide 服务提供者
https://github.com/wangpengxiang1996/NacosProvider
consumer 服务消费者
https://github.com/wangpengxiang1996/NacosConsumer
本文结束
Original: https://blog.csdn.net/qq_38496932/article/details/126958855
Author: 鹏鹏王
Title: 使用Netflix Eureka替换Alibaba Nacos注册中心