手把手教你将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}

5.配置文件

端口自定义,测试与正式环境配置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>,方便在不重新编译的情况下快速通过设置环境变量的方式添加一些想要的值。

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Eureka作为注册中心Nacos作为配置中心有以下几个区别: 1. 技术栈:Eureka是Spring Cloud生态系统中的一部分,而Nacos是阿里巴巴开源的一个独立的服务注册和配置中心。 2. 功能:Eureka主要用于服务注册和发现,它提供了服务注册、服务发现、负载均衡等功能。而Nacos不仅提供了服务注册和发现的功能,还提供了动态配置管理、服务路由、服务熔断等功能。 3. 数据一致性:Eureka采用了AP(可用性和分区容错性)原则,即在网络分区故障的情况下保证可用性,但可能会导致数据不一致。而Nacos采用了CP(一致性和分区容错性)原则,即在网络分区故障的情况下保证数据一致性,但可能会导致可用性降低。 4. 架构:Eureka采用了主从架构,其中一个节点作为主节点,其他节点作为从节点。而Nacos采用了集群模式,所有节点都是对等的。 5. 社区支持:Eureka是Spring Cloud生态系统中的一部分,得到了广泛的社区支持和使用。而Nacos是阿里巴巴开源的项目,也得到了相应的社区支持。 综上所述,使用Eureka作为注册中心Nacos作为配置中心的区别主要在功能、数据一致性和架构等方面。选择使用哪个取决于具体的需求和项目情况。 #### 引用[.reference_title] - *1* *2* *3* [springcloud2-注册中心eurekanacos](https://blog.csdn.net/zhangchen124/article/details/125465464)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值