使用Netflix Eureka替换Alibaba Nacos注册中心

5 篇文章 1 订阅
3 篇文章 0 订阅

上篇文章 使用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贴出来

<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
    <groupId>com.wpx</groupId>
    <artifactId>EurekaServer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>EurekaServer</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.wpx.eurekaserver.EurekaServerApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </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 // 使用@EnableEurekaServer 注解开启Eureka Server
@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.RELEASE</spring-cloud-alibaba.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
        
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

新增项

	<properties>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </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) // 设置不自动注册到注册中心Nacos,因为这个项目本身是消费者,不向外暴露服务

这个注解在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:8848
Netflix 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

本文结束

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值