手把手教你将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
public class 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
public class SwaggerConfig {
//swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("数据去重复")
.select()
//为当前包路径
.apis(RequestHandlerSelectors.basePackage("com.join.derepeat.controller"))
.paths(PathSelectors.any())
.build();
}
//构建 api文档的详细信息函数,注意这里的注解引用的是哪个
private ApiInfo apiInfo() {
return new 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>,方便在不重新编译的情况下快速通过设置环境变量的方式添加一些想要的值。
以上就是在实战中总结出来的配置经验。
手把手教你将Eureka升级Nacos注册中心的更多相关文章
- Spring Cloud 系列之 Alibaba Nacos 注册中心(一)
前言 从本章节开始,我们学习 Spring Cloud Alibaba 相关微服务组件. Spring Cloud Alibaba 介绍 Spring Cloud Alibaba 致力于提供微服务开发 ...
- 手动造轮子——为Ocelot集成Nacos注册中心
前言 近期在看博客的时候或者在群里看聊天的时候,发现很多都提到了Ocelot网关的问题.我之前也研究过一点,网关本身是一种通用的解决方案,主要的工作就是拦截请求统一处理,比如认证.授权.熔断. ...
- Spring Cloud Alibaba(4)---Nacos(注册中心)
Nacos(注册中心) 有关Spring Cloud Alibaba之前写过三篇文章. Spring Cloud Alibaba(1)---入门篇 Spring Cloud Alibaba(2)--- ...
- SpringCloud Alibaba实战(7:nacos注册中心管理微服务)
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节我们已经完成了Nacos Server的本地部署,这一节我们学习如何将Nac ...
- eureka高可用注册中心
Eureka高可用注册中心 两个配置文件: application-peer1.properties application-peer2.properties 都需要加上 eureka.client. ...
- spring cloud 系列第2篇 —— eureka 高可用注册中心的搭建 (F版本)
源码仓库地址:https://github.com/heibaiying/spring-samples-for-all 一.项目结构 eureka-server为服务注册中心,负责服务的管理: eur ...
- Spring cloud搭建Eureka高可用注册中心
注册中心在微服务中是必不可少的一部分,主要用来实现服务自治的功能,本文则主要记载使用Netflix提供的Eureka作为注册中心,来实现服务自治的功能. 实际上Eureka的集群搭建方法很简单:每一台 ...
- Spring Cloud Alibaba 使用nacos 注册中心
### 背景 上一文我们讲到了如何去搭建注册中心,这一次我们讲述如何使用nacos作为注册中心 ### spring-cloud-alibaba-basis 创建基础依赖 首先我们创建一个spring ...
- spring cloud 2.x版本 Eureka Server服务注册中心教程
本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 1.创建服务注册中心 1.1 新建Spring boot工程:eureka-server 1 ...
- Spring Cloud 系列之 Alibaba Nacos 注册中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Alibaba Nacos 注册中心(一) 本篇文章讲解 Nacos 注册中心集群环境搭建. Nacos 集群环境搭建 ...
随机推荐
- 京东云开发者|经典同态加密算法Paillier解读 - 原理、实现和应用
摘要 随着云计算和人工智能的兴起,如何安全有效地利用数据,对持有大量数字资产的企业来说至关重要.同态加密,是解决云计算和分布式机器学习中数据安全问题的关键技术,也是隐私计算中,横跨多方安全计算,联邦学 ...
- Go语言核心36讲51
你好,我是郝林,今天我们继续分享程序性能分析基础的内容. 在上一篇文章中,我们围绕着"怎样让程序对CPU概要信息进行采样"这一问题进行了探讨,今天,我们再来一起看看它的拓展问题. ...
- toB应用私有化交付发展历程、技术对比和选型
由于数据隐私和网络安全的考虑,大多数toB场景的客户需要私有化应用交付,也就是需要交付到客户的环境里,这样的客户有政府.金融.军工.公安.大型企业.特色行业等,这些私有化场景限制很多,如何提高私有化应 ...
- 一文讲透CabloyJS全栈框架的来龙去脉
本文受众 咱们做软件开发,就好比是建造一幢幢房屋,一座座桥梁,既可以是北方宫殿的巍峨,也可以有南方庭院的雅致,更可以是横跨群山的峻险与孤悬.那么,不同的语言.不同的框架也都由其内在的秉质吸引着一批粉丝 ...
- Codeforces Round #836 (Div. 2) A-D
比赛链接 A 题意 给一个字符串 \(s\) ,对其加倍,即每个字符后面追加一个相同字符. 加倍后可以重排列,要求构造一个回文串. 题解 知识点:构造. 既然可以重排列了,那顺序是随意的了,直接翻转加 ...
- mingw编译opencv动态链接库和静态链接库及使用方法
前言 我一直不知道编译的过程以及cmake, make 这些工具是干什么的,所有抽时间研究了一下. 简单来说就是 cmake 是根据 CMakeLists.txt 用来生成 makefile文件的.而 ...
- 2.6:Python数据存取-文件、文件夹及目录、数据库
一.Python文件读写 1.文件的打开模式 <class '_io.TextIOWrapper'>和<class '_io.BufferedReader'>.python使用 ...
- 协程- gevent模块
协程 1.什么是协助:在单线程下实现并发效果 2.协程的原理: 通过代码监听IO操作一旦遇到 IO 操作就立刻切换下一个程序 让cpu一直在工作 这样就可以一直占用CPU的效率 提高程序执行效率 切换 ...
- view-design tabpane禁用后renderHeader失效问题
需求是这样的 在tabPane的renderHeader里面添加hover事件(使用组件自带的Poptip)能显示提示 其实这个不算是问题,设置disabled属性后,原本的元素上面添加了 ivu-t ...
- uniapp 微信小程序 改变头部的信号、时间、电池显示颜色
修改前 修改后 修改方法:"navigationBarTextStyle":"white"