手把手教你将Eureka升级Nacos注册中心

简介: 由于原有SpringCloud体系版本比较老,最初的注册中心使用的Eureka后期官方无升级方案,配置中心无法在线管理配置,还有实时上下线的问题,因此需要将原有系统的Eureka服务升级Nacos注册心服务。

  由于原有SpringCloud体系版本比较老,最初的注册中心使用的Eureka后期官方无升级方案,配置中心无法在线管理配置,还有实时上下线的问题,因此需要将原有系统的Eureka服务升级Nacos注册心服务。

原有版本SpringBoot1.5.15、SpringCloud E、注册中心Eureka

升级后版本SpringBoot2.1.6、SpringCloud G、注册中心Nacos1.4.2

1.升级springboot为2.x

注释掉根目录下的parent,和starter依赖。

注释掉dependencyManagement下的platform-bom

添加dependencyManagement的springboot依赖

<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-dependencies</artifactId>

   <version>${spring-boot.version}</version>

   <type>pom</type>

   <scope>import</scope>

</dependency>

添加打包资源

<resources>

   <!--如果不设置resource 会导致application.yml中的@@找不到pom文件中的配置-->

   <resource>

       <directory>src/main/resources</directory>

       <filtering>true</filtering>

   </resource>

</resources>

2.升级springcloud版本到Greenwich.SR2

并添加alibaba.cloud版本

<spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>

3.替换掉Eureka注册中心与配置中心

使用Undertow 替换内置 Tomcat;

<!--使用Undertow 替换内置 Tomcat-->

<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-web</artifactId>

   <exclusions>

       <exclusion>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-tomcat</artifactId>

       </exclusion>

   </exclusions>

</dependency>

<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-undertow</artifactId>

</dependency>

添加Nacos配置:

<!--阿里巴巴 nacos 服务发现-->

<!--注册中心-->

<dependency>

  <groupId>com.alibaba.cloud</groupId>

  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

  <version>${spring-cloud-alibaba.version}</version>

</dependency>

<!--配置中心-->

<dependency>

  <groupId>com.alibaba.cloud</groupId>

  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

  <version>${spring-cloud-alibaba.version}</version>

</dependency>

添加监控相关引用

<!--配置文件处理器-->

<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-configuration-processor</artifactId>

   <optional>true</optional>

</dependency>

<!--监控-->

<dependency>

   <groupId>org.springframework.boot</groupId>

   <artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

升级Feign引用

<!--声明式接口调用-->

<dependency>

   <groupId>org.springframework.cloud</groupId>

   <artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

SpringbootApplication启动项中更新为

@EnableFeignClients

@EnableDiscoveryClient

@SpringBootApplication

publicclass JoinDerepeatApplication {


}

4.更改配置文件bootstrap.yml

根据自身服务更改下面内容,${nacos-namespace:}这种写法是为了运行时可以由外部环境变量传入,而不用更改配置重新打包发布。

server:

 port: 8123

 undertow:

   worker-threads: 1000

   io-threads: 32

   accesslog:

     enabled: true

     dir: /logs/${spring.application.name}

     pattern: '%t,${spring.application.name},%a,%A:%p,"%r",%s,%T,%b,%{i,Referer},"%{i,User-Agent}"'


spring:

 application:

   name: join-derepeat

 profiles:

   active: ${active:dev}

 cloud:

   #手动配置Bus id,

   bus:

     id: ${spring.application.name}:${server.port}

 main:

   allow-bean-definition-overriding: true

 #解决restful 404错误 spring.mvc.throw-exception-if-no-handler-found=true spring.resources.add-mappings=false

 mvc:

   throw-exception-if-no-handler-found: true

 resources:

   add-mappings: false


management:

 endpoints:

   web:

     exposure:

       include: '*'

 endpoint:

   health:

     show-details: ALWAYS


#解决读取配置文件中文乱码

file:

 encoding: utf-8


---

spring:

 profiles: dev

 cloud:

   inetutils:

     preferred-networks: 10.2

   nacos:

     config:

       namespace:

       server-addr: 10.3.87.30:3105

       shared-configs[0]:

         data-id: common.properties

##          refresh: true

       shared-configs[1]:

         data-id: rabbitmq.properties

     discovery:

       namespace:

       server-addr: 10.3.87.30:3105

       metadata:

         version: ${project.version}

         description: ${project.description}

---

spring:

 profiles: prd

 cloud:

   nacos:

     config:

       namespace: ${nacos-namespace:}

       server-addr: ${config-server-addr}

       shared-configs[0]:

         data-id: common.properties

   ##          refresh: true

       shared-configs[1]:

         data-id: rabbitmq.properties

     discovery:

       namespace: ${nacos-namespace:}

       server-addr: ${discovery-server-addr}

       metadata:

         version: ${project.version}

         description: ${project.description}

端口自定义,测试与正式环境配置shared-configs[0]  common.properties 本项目需要加载的配置文件内容保存在Nacos中心。

refresh: true 设置为可以实时动态更新的配置文件

配置内容示例

可以添加自已的配置文件 如添加join-derepeat.yml。

只需要继续添加自己的配置文件shared-configs[2]配置即可。

最后启动本服务

访问接口页面http://localhost:8123/doc.html 调试即可。

6.Swagger-UI更换

<swagger2.version>2.9.0</swagger2.version>

<swagger-bootstrap-ui.version>1.9.5</swagger-bootstrap-ui.version>

<!--swagger-->

<dependency>

   <groupId>io.springfox</groupId>

   <artifactId>springfox-swagger2</artifactId>

   <version>${swagger2.version}</version>

</dependency>

<dependency>

   <groupId>com.github.xiaoymin</groupId>

   <artifactId>swagger-bootstrap-ui</artifactId>

   <version>${swagger-bootstrap-ui.version}</version>

</dependency>

 

在config文件夹内添加SwaggerConfig文件

将如下高亮更新为自己的程序内容

@Configuration

@EnableSwagger2

@EnableSwaggerBootstrapUI

publicclass SwaggerConfig {

   //swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等

   @Bean

   public Docket createRestApi() {

       returnnew Docket(DocumentationType.SWAGGER_2)

               .apiInfo(apiInfo())

               .groupName("数据去重复")

               .select()

               //为当前包路径

               .apis(RequestHandlerSelectors.basePackage("com.join.derepeat.controller"))

               .paths(PathSelectors.any())

               .build();

   }

   //构建 api文档的详细信息函数,注意这里的注解引用的是哪个

   private ApiInfo apiInfo() {

       returnnew ApiInfoBuilder()

               //页面标题

               .title("数据去重复 API")

               //创建人

               .contact(new Contact("james", "", ""))

               //版本号

               .version("1.0")

               //描述

               .description("重复数据拦截")

               .build();

   }

}

7.更改镜像打包pom文件

由于是采用Docker部署,因此需要打成docker镜像,使用的是docker-maven-plugin插件。

添加容器仓库地址

<docker.repostory>10.3.87.5:8080</docker.repostory>

添加

<plugin>

               <groupId>com.spotify</groupId>

               <artifactId>docker-maven-plugin</artifactId>

               <version>1.1.1</version>

               <configuration>

                   <!--覆盖相同标签镜像-->

                   <forceTags>true</forceTags>

                   <!-- 与maven配置文件settings.xml一致 -->

                   <serverId>nexus-releases</serverId>

                   <!--私有仓库地址 -->

                   <registryUrl>https://${docker.repostory}</registryUrl>

                   <!--远程Docker地址 -->

                   <dockerHost>http://10.3.87.21:2345</dockerHost>

                   <!-- 注意imageName一定要是符合正则[a-z0-9-_.]的,否则构建不会成功 -->

                   <!--指定镜像名称 仓库/镜像名:标签-->

                   <imageName>${docker.repostory}/${project.name}:${project.version}</imageName>

                   <baseImage>join:0.6</baseImage>

                   <maintainer>${project.description} admin</maintainer>

                   <env>

                    <JAVA_OPTS>

                    -Xms700m -Xmx700m

                    </JAVA_OPTS>

                   </env>

                   <cmd>java $JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/${project.build.finalName}-dump.hprof -jar /app/${project.build.finalName}.jar</cmd>

                   <resources>

                       <resource>

                           <!-- 指定要复制的目录路径,这里是当前目录 -->

                           <!-- 将打包文件放入dockerDirectory指定的位置 -->

                           <targetPath>/app/</targetPath>

                           <!-- 指定要复制的根目录,这里是target目录 -->

                           <directory>${project.build.directory}</directory>

                           <!-- 指定需要拷贝的文件,这里指最后生成的jar包 -->

                           <include>${project.build.finalName}.jar</include>

                       </resource>

                   </resources>

               </configuration>

           </plugin>

小技巧:这里将jar运行时设置的参数变量化<JAVA_OPTS>,方便在不重新编译的情况下快速通过设置环境变量的方式添加一些想要的值。

以上就是在实战中总结出来的配置经验。

 

目录
相关文章
|
3月前
|
人工智能 安全 Cloud Native
Nacos 3.0 架构升级,AI 时代更安全的 Registry
随着Nacos3.0的发布,定位由“更易于构建云原生应用的动态服务发现、配置管理和服务管理平台”升级至“ 一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台 ”。
|
6月前
|
人工智能 JSON API
Nacos 发布 MCP Registry,实现存量应用接口“0改动”升级到 MCP 协议
MCP(Model Calling Protocol)生态快速发展,Nacos作为MCP Registry,通过与Higress网关结合,实现“0代码”将存量API转化为MCP协议接口。本文详细解析了Nacos如何快速构建MCP Server,包括工具列表暴露、协议转换原理及优势。同时,通过高德API实例演示“0改动”适配流程。Nacos 3.0正式发布,定位AI应用服务管理平台,支持动态服务发现与配置管理,助力MCP生态发展。欢迎参与社区共建!
1178 1
|
9月前
|
负载均衡 Kubernetes 网络协议
注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
这是小卷对分布式系统架构学习的第9篇文章,继续探讨注册中心的原理及选型。文章详细介绍了Eureka、Nacos的工作机制与特点,并对比了Eureka、Nacos、Consul和Zookeeper在一致性协议、健康检查、负载均衡等方面的差异。最后根据不同的应用场景给出了注册中心的选型建议,帮助读者理解如何选择最适合的注册中心。
711 100
|
8月前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
3188 14
|
11月前
|
存储 缓存 负载均衡
Nacos注册中心
Nacos注册中心
243 1
Nacos注册中心
|
11月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
189 5
|
11月前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
242 4
|
11月前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
206 3
|
11月前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
546 3
|
10月前
|
Nacos 微服务
Nacos与Eureka的区别
Eureka和Nacos均支持服务注册发现、基于心跳的健康检查及AP模式下的集群数据同步。主要区别在于:心跳频率、服务剔除机制、服务检测与清理周期不同,Nacos还额外提供配置管理功能。
326 0

热门文章

最新文章