手把手教你將Eureka升級Nacos注冊中心

  由于原有SpringCloud體系版本比較老,最初的注冊中心使用的Eureka后期官方無升級方案,配置中心無法在線管理配置,還有實(shí)時上下線的問題,因此需要將原有系統(tǒng)的Eureka服務(wù)升級Nacos注冊心服務(wù)。

原有版本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><!--如果不設(shè)置resource 會導(dǎo)致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 替換內(nèi)置 Tomcat;

<!--使用Undertow 替換內(nèi)置 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 服務(wù)發(fā)現(xiàn)--><!--注冊中心--><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>

?添加監(jiān)控相關(guān)引用

<!--配置文件處理器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--監(jiān)控--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

升級Feign引用

<!--聲明式接口調(diào)用--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

?SpringbootApplication啟動項(xiàng)中更新為

@EnableFeignClients

@EnableDiscoveryClient

@SpringBootApplicationpublicclass JoinDerepeatApplication {

}

4.更改配置文件bootstrap.yml

根據(jù)自身服務(wù)更改下面內(nèi)容,${nacos-namespace:}這種寫法是為了運(yùn)行時可以由外部環(huán)境變量傳入,而不用更改配置重新打包發(fā)布。

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.配置文件

端口自定義,測試與正式環(huán)境配置shared-configs[0]? common.properties 本項(xiàng)目需要加載的配置文件內(nèi)容保存在Nacos中心。

refresh: true 設(shè)置為可以實(shí)時動態(tài)更新的配置文件

配置內(nèi)容示例

可以添加自已的配置文件?如添加join-derepeat.yml。

只需要繼續(xù)添加自己的配置文件shared-configs[2]配置即可。

最后啟動本服務(wù)

訪問接口頁面http://localhost:8123/doc.html調(diào)試即可。

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文件夾內(nèi)添加SwaggerConfig文件

將如下高亮更新為自己的程序內(nèi)容

@Configuration

@EnableSwagger2

@EnableSwaggerBootstrapUIpublicclass SwaggerConfig {

? ? //swagger2的配置文件,這里可以配置swagger2的一些基本的內(nèi)容,比如掃描的包等等? ? @Bean

? ? public Docket createRestApi() {

? ? ? ? returnnew Docket(DocumentationType.SWAGGER_2)

? ? ? ? ? ? ? ? .apiInfo(apiInfo())

? ? ? ? ? ? ? ? .groupName("數(shù)據(jù)去重復(fù)")

? ? ? ? ? ? ? ? .select()

? ? ? ? ? ? ? ? //為當(dāng)前包路徑.apis(RequestHandlerSelectors.basePackage("com.join.derepeat.controller"))

? ? ? ? ? ? ? ? .paths(PathSelectors.any())

? ? ? ? ? ? ? ? .build();

? ? }

? ? //構(gòu)建 api文檔的詳細(xì)信息函數(shù),注意這里的注解引用的是哪個private ApiInfo apiInfo() {

? ? ? ? returnnew ApiInfoBuilder()

? ? ? ? ? ? ? ? //頁面標(biāo)題.title("數(shù)據(jù)去重復(fù) API")

? ? ? ? ? ? ? ? //創(chuàng)建人.contact(newContact("james", "", ""))

? ? ? ? ? ? ? ? //版本號.version("1.0")

? ? ? ? ? ? ? ? //描述.description("重復(fù)數(shù)據(jù)攔截")

? ? ? ? ? ? ? ? .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><!--覆蓋相同標(biāo)簽鏡像--><forceTags>true</forceTags><!-- 與maven配置文件settings.xml一致 --><serverId>nexus-releases</serverId><!--私有倉庫地址 --><registryUrl>https://${docker.repostory}</registryUrl><!--遠(yuǎn)程Docker地址 --><dockerHost>http://10.3.87.21:2345</dockerHost><!-- 注意imageName一定要是符合正則[a-z0-9-_.]的,否則構(gòu)建不會成功 --><!--指定鏡像名稱 倉庫/鏡像名:標(biāo)簽--><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><!-- 指定要復(fù)制的目錄路徑,這里是當(dāng)前目錄 --><!-- 將打包文件放入dockerDirectory指定的位置 --><targetPath>/app/</targetPath><!-- 指定要復(fù)制的根目錄,這里是target目錄 --><directory>${project.build.directory}</directory><!-- 指定需要拷貝的文件,這里指最后生成的jar包 --><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin>

小技巧:這里將jar運(yùn)行時設(shè)置的參數(shù)變量化<JAVA_OPTS>,方便在不重新編譯的情況下快速通過設(shè)置環(huán)境變量的方式添加一些想要的值。

以上就是在實(shí)戰(zhàn)中總結(jié)出來的配置經(jīng)驗(yàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容