手把手教你将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>,方便在不重新编译的情况下快速通过设置环境变量的方式添加一些想要的值。

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

 

目录
相关文章
|
11天前
|
存储 缓存 负载均衡
Nacos注册中心
Nacos注册中心
33 1
Nacos注册中心
|
10天前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
22 4
|
10天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
26 3
|
10天前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
24 3
|
3月前
|
安全 Nacos 数据安全/隐私保护
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
本文详细介绍了如何在微服务环境下从 Nacos 1.3.0 升级到 2.3.0,并确保 Seata 各版本的兼容性。作者小米分享了升级过程中的关键步骤,包括备份配置、更新鉴权信息及验证测试等,并解答了常见问题。通过这些步骤,可以帮助读者顺利完成升级并提高系统的安全性与一致性。
118 8
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
|
1月前
|
Java Shell Nacos
升级Nacos竟然踩了这种坑?配置文件里的“隐形杀手”!
本文介绍了从Nacos 1.3.0升级到2.3.0的过程及注意事项,涵盖单机与集群模式的升级步骤,特别分享了一次因配置文件中多余空格导致的服务启动失败的经历,提醒读者注意配置细节。
52 0
|
2月前
|
Kubernetes Nacos 容器
nacos注册不上
我正在使用开源的Nacos,并已在Kubernetes中部署了Nacos服务,通过端口映射可在集群外访问Nacos控制台。Kubernetes使用NodePort类型暴露了8848、9848、9849、7848和9555端口,但在尝试注册时遇到问题,出现“Client not connected, current status: STARTING”的错误,导致启动失败。
|
1月前
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
59 0
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
3月前
|
Cloud Native Java Nacos
微服务注册中心-Nacos概述
该博客文章提供了对Nacos的全面概述,包括其基本介绍、与Spring Cloud集成的优势、主要功能以及如何在Spring Cloud Alibaba项目中作为服务注册中心使用Nacos。文章解释了Nacos是一个动态服务发现、配置管理和服务管理平台,支持服务发现、健康监测、动态配置、DNS服务和元数据管理。还介绍了如何下载和启动Nacos服务器,以及如何将微服务注册到Nacos中,包括修改pom.xml文件引入依赖、配置application.properties文件和使用@EnableDiscoveryClient注解开启服务注册发现功能。
微服务注册中心-Nacos概述