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

打印 上一主题 下一主题

主题 981|帖子 981|积分 2943

  由于原有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依赖
  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-dependencies</artifactId>
  4.     <version>${spring-boot.version}</version>
  5.     <type>pom</type>
  6.     <scope>import</scope>
  7. </dependency>
复制代码
添加打包资源
 
  1. <resources>
  2.    
  3.     <resource>
  4.         <directory>src/main/resources</directory>
  5.         <filtering>true</filtering>
  6.     </resource>
  7. </resources>
复制代码
2.升级springcloud版本到Greenwich.SR2


并添加alibaba.cloud版本
  1. <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
复制代码
3.替换掉Eureka注册中心与配置中心


使用Undertow 替换内置 Tomcat;
  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-starter-web</artifactId>
  4.     <exclusions>
  5.         <exclusion>
  6.             <groupId>org.springframework.boot</groupId>
  7.             <artifactId>spring-boot-starter-tomcat</artifactId>
  8.         </exclusion>
  9.     </exclusions>
  10. </dependency>
  11. <dependency>
  12.     <groupId>org.springframework.boot</groupId>
  13.     <artifactId>spring-boot-starter-undertow</artifactId>
  14. </dependency>
复制代码
添加Nacos配置:
  1. <dependency>
  2.    <groupId>com.alibaba.cloud</groupId>
  3.    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4.    <version>${spring-cloud-alibaba.version}</version>
  5. </dependency>
  6. <dependency>
  7.    <groupId>com.alibaba.cloud</groupId>
  8.    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  9.    <version>${spring-cloud-alibaba.version}</version>
  10. </dependency>
复制代码
 添加监控相关引用
  1. <dependency>
  2.     <groupId>org.springframework.boot</groupId>
  3.     <artifactId>spring-boot-configuration-processor</artifactId>
  4.     <optional>true</optional>
  5. </dependency>
  6. <dependency>
  7.     <groupId>org.springframework.boot</groupId>
  8.     <artifactId>spring-boot-starter-actuator</artifactId>
  9. </dependency>
复制代码
升级Feign引用
  1. <dependency>
  2.     <groupId>org.springframework.cloud</groupId>
  3.     <artifactId>spring-cloud-starter-openfeign</artifactId>
  4. </dependency>
复制代码
 SpringbootApplication启动项中更新为
  1. @EnableFeignClients
  2. @EnableDiscoveryClient
  3. @SpringBootApplication
  4. public class JoinDerepeatApplication {
  5. }
复制代码
4.更改配置文件bootstrap.yml

根据自身服务更改下面内容,${nacos-namespace:}这种写法是为了运行时可以由外部环境变量传入,而不用更改配置重新打包发布。
  1. server:
  2.   port: 8123
  3.   undertow:
  4.     worker-threads: 1000
  5.     io-threads: 32
  6.     accesslog:
  7.       enabled: true
  8.       dir: /logs/${spring.application.name}
  9.       pattern: '%t,${spring.application.name},%a,%A:%p,"%r",%s,%T,%b,%{i,Referer},"%{i,User-Agent}"'
  10. spring:
  11.   application:
  12.     name: join-derepeat
  13.   profiles:
  14.     active: ${active:dev}
  15.   cloud:
  16.     #手动配置Bus id,
  17.     bus:
  18.       id: ${spring.application.name}:${server.port}
  19.   main:
  20.     allow-bean-definition-overriding: true
  21.   #解决restful 404错误 spring.mvc.throw-exception-if-no-handler-found=true spring.resources.add-mappings=false
  22.   mvc:
  23.     throw-exception-if-no-handler-found: true
  24.   resources:
  25.     add-mappings: false
  26. management:
  27.   endpoints:
  28.     web:
  29.       exposure:
  30.         include: '*'
  31.   endpoint:
  32.     health:
  33.       show-details: ALWAYS
  34. #解决读取配置文件中文乱码
  35. file:
  36.   encoding: utf-8
  37. ---
  38. spring:
  39.   profiles: dev
  40.   cloud:
  41.     inetutils:
  42.       preferred-networks: 10.2
  43.     nacos:
  44.       config:
  45.         namespace:
  46.         server-addr: 10.3.87.30:3105
  47.         shared-configs[0]:
  48.           data-id: common.properties
  49. ##          refresh: true
  50.         shared-configs[1]:
  51.           data-id: rabbitmq.properties
  52.       discovery:
  53.         namespace:
  54.         server-addr: 10.3.87.30:3105
  55.         metadata:
  56.           version: ${project.version}
  57.           description: ${project.description}
  58. ---
  59. spring:
  60.   profiles: prd
  61.   cloud:
  62.     nacos:
  63.       config:
  64.         namespace: ${nacos-namespace:}
  65.         server-addr: ${config-server-addr}
  66.         shared-configs[0]:
  67.           data-id: common.properties
  68.     ##          refresh: true
  69.         shared-configs[1]:
  70.           data-id: rabbitmq.properties
  71.       discovery:
  72.         namespace: ${nacos-namespace:}
  73.         server-addr: ${discovery-server-addr}
  74.         metadata:
  75.           version: ${project.version}
  76.           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更换
  1. <swagger2.version>2.9.0</swagger2.version>
  2. <swagger-bootstrap-ui.version>1.9.5</swagger-bootstrap-ui.version>
复制代码
  1. <dependency>
  2.     <groupId>io.springfox</groupId>
  3.     <artifactId>springfox-swagger2</artifactId>
  4.     <version>${swagger2.version}</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>com.github.xiaoymin</groupId>
  8.     <artifactId>swagger-bootstrap-ui</artifactId>
  9.     <version>${swagger-bootstrap-ui.version}</version>
  10. </dependency>
复制代码
 
在config文件夹内添加SwaggerConfig文件
将如下高亮更新为自己的程序内容
  1. @Configuration
  2. @EnableSwagger2
  3. @EnableSwaggerBootstrapUI
  4. public class SwaggerConfig {
  5.     //swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等
  6.     @Bean
  7.     public Docket createRestApi() {
  8.         return new Docket(DocumentationType.SWAGGER_2)
  9.                 .apiInfo(apiInfo())
  10.                 .groupName("数据去重复")
  11.                 .select()
  12.                 //为当前包路径
  13.                 .apis(RequestHandlerSelectors.basePackage("com.join.derepeat.controller"))
  14.                 .paths(PathSelectors.any())
  15.                 .build();
  16.     }
  17.     //构建 api文档的详细信息函数,注意这里的注解引用的是哪个
  18.     private ApiInfo apiInfo() {
  19.         return new ApiInfoBuilder()
  20.                 //页面标题
  21.                 .title("数据去重复 API")
  22.                 //创建人
  23.                 .contact(new Contact("james", "", ""))
  24.                 //版本号
  25.                 .version("1.0")
  26.                 //描述
  27.                 .description("重复数据拦截")
  28.                 .build();
  29.     }
  30. }
复制代码
7.更改镜像打包pom文件

由于是采用Docker部署,因此需要打成docker镜像,使用的是docker-maven-plugin插件。
添加容器仓库地址
  1. <docker.repostory>10.3.87.5:8080</docker.repostory>
复制代码
添加
  1. <plugin>
  2.                 <groupId>com.spotify</groupId>
  3.                 <artifactId>docker-maven-plugin</artifactId>
  4.                 <version>1.1.1</version>
  5.                 <configuration>
  6.                     
  7.                     <forceTags>true</forceTags>
  8.                     
  9.                     <serverId>nexus-releases</serverId>
  10.                     
  11.                     <registryUrl>https://${docker.repostory}</registryUrl>
  12.                     
  13.                     <dockerHost>http://10.3.87.21:2345</dockerHost>
  14.                     
  15.                     
  16.                     <imageName>${docker.repostory}/${project.name}:${project.version}</imageName>
  17.                     <baseImage>join:0.6</baseImage>
  18.                     <maintainer>${project.description} admin</maintainer>
  19.                     <env>
  20.                      <JAVA_OPTS>
  21.                      -Xms700m -Xmx700m
  22.                      </JAVA_OPTS>
  23.                     </env>
  24.                     <cmd>java $JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/logs/${project.build.finalName}-dump.hprof -jar /app/${project.build.finalName}.jar</cmd>
  25.                     <resources>
  26.                         <resource>
  27.                            
  28.                            
  29.                             <targetPath>/app/</targetPath>
  30.                            
  31.                             <directory>${project.build.directory}</directory>
  32.                            
  33.                             <include>${project.build.finalName}.jar</include>
  34.                         </resource>
  35.                     </resources>
  36.                 </configuration>
  37.             </plugin>
复制代码
小技巧:这里将jar运行时设置的参数变量化,方便在不重新编译的情况下快速通过设置环境变量的方式添加一些想要的值。
以上就是在实战中总结出来的配置经验。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表