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

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

 

目录
相关文章
|
2月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
73 3
|
21天前
|
安全 Nacos 数据安全/隐私保护
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
本文详细介绍了如何在微服务环境下从 Nacos 1.3.0 升级到 2.3.0,并确保 Seata 各版本的兼容性。作者小米分享了升级过程中的关键步骤,包括备份配置、更新鉴权信息及验证测试等,并解答了常见问题。通过这些步骤,可以帮助读者顺利完成升级并提高系统的安全性与一致性。
69 8
升级指南:从Nacos 1.3.0 到 2.3.0,并兼容 Seata 的鉴权配置
|
7天前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
1月前
|
Cloud Native Java Nacos
微服务注册中心-Nacos概述
该博客文章提供了对Nacos的全面概述,包括其基本介绍、与Spring Cloud集成的优势、主要功能以及如何在Spring Cloud Alibaba项目中作为服务注册中心使用Nacos。文章解释了Nacos是一个动态服务发现、配置管理和服务管理平台,支持服务发现、健康监测、动态配置、DNS服务和元数据管理。还介绍了如何下载和启动Nacos服务器,以及如何将微服务注册到Nacos中,包括修改pom.xml文件引入依赖、配置application.properties文件和使用@EnableDiscoveryClient注解开启服务注册发现功能。
微服务注册中心-Nacos概述
|
1月前
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
2月前
|
Nacos 微服务
Zookeeper 的 ZAB 协议 以及 zookeeper 与 nacos 注册中心比对
Zookeeper 的 ZAB 协议 以及 zookeeper 与 nacos 注册中心比对
40 4
|
1月前
|
Java Nacos Docker
"揭秘!Docker部署Seata遇上Nacos,注册成功却报错?这些坑你不得不防!一网打尽解决秘籍,让你的分布式事务稳如老狗!"
【8月更文挑战第15天】在微服务架构中,Nacos搭配Seata确保数据一致性时,Docker部署Seata后可能出现客户端连接错误,如“can not connect to services-server”。此问题多由网络配置不当、配置文件错误或版本不兼容引起。解决策略包括:调整Docker网络设置确保可达性;检查并修正`file.conf`和`registry.conf`中的Nacos地址和端口;验证Seata与Nacos版本兼容性;修改配置后重启服务;参考官方文档和最佳实践进行配置。通过这些步骤,能有效排除故障,保障服务稳定运行。
36 0
|
1月前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
42 0
|
1月前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
83 0
|
1月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
79 0