SpringCloud?Alibaba環(huán)境集成之nacos詳解
前言
在SpringCloud Alibaba的使用過程中,我總結(jié)為如下步驟:
- 下載并啟動服務(wù)端
- 客戶端引入spring-cloud-starter-alibaba的jar包
- 客戶端properties或yml加入相關(guān)配置
- 客戶端加上相應(yīng)的注解開啟功能
- 服務(wù)端增加相應(yīng)配置
- 數(shù)據(jù)持久化,服務(wù)端集群部署
Nacos服務(wù)端
1.下載nacos
在github上查看最新版的nacos下載
2.單機(jī)啟動nacos服務(wù)
默認(rèn)是集群運(yùn)行的,使用-m指定nacos單機(jī)運(yùn)行
startup.cmd -m standalone
3.訪問nacos服務(wù)
nacos默認(rèn)端口為8848,用戶名:nacos,密碼:nacos,上下文路徑:/nacos
http://127.0.0.1:8848/nacos
Nacos注冊中心
1.代碼中引入jar
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
2.properties加入配置
server.port=9001 # 應(yīng)用名稱 spring.application.name=springcloud-alibaba-consumer # Nacos 服務(wù)發(fā)現(xiàn)與注冊配置,其中子屬性 server-addr 指定 Nacos 服務(wù)器主機(jī)和端口 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 management.endpoints.web.exposure.include=*
3.啟動類加入注解
@EnableDiscoveryClient
Nacos配置中心
1.代碼中引入jar
只引入spring-cloud-starter-alibaba-nacos-config.jar, bootstrap.yml一直不生效,還需要引入spring-cloud-starter-bootstrap.jar
<!-- 參考官方文檔,配置一直不生效,bootstrap中的配置沒有被讀取到,需要加入該依賴 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
2.bootstrap.properties加入配置
# Nacos認(rèn)證信息 spring.cloud.nacos.config.username=nacos spring.cloud.nacos.config.password=nacos spring.cloud.nacos.config.contextPath=/nacos # 設(shè)置配置中心服務(wù)端地址 spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.refresh-enabled=true # 指定配置格式,默認(rèn)是properties,可選text、json、xml、yaml、html、properties spring.cloud.nacos.config.file-extension=yaml # 默認(rèn)是DEFAULT_GROUP,可以指定配置所在組 spring.cloud.nacos.config.group=dev # Nacos 配置中心的namespace。需要注意,如果使用 public 的 namcespace ,請不要填寫這個值,直接留空即可 # spring.cloud.nacos.config.namespace= # 應(yīng)用名稱 spring.application.name=springcloud-alibaba-nacos-client # 激活 dev 的配置 spring.profiles.active=dev server.port=9006 server.servlet.context-path=/nacos-config
3.加入注解@RefreshScope
package com.ykq.springcloudalibabanacosclientdev.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author: kqyin * @date: 2022/3/24 16:24 * @Description: */ @RestController @RefreshScope public class NacosConfigController { @Value("${userName:}") private String name; @RequestMapping("/test/getName") public String getNacosTestName() { return name; } }
4.在nacos中配置相關(guān)信息
5.注意點(diǎn)
- nacos中配置的Group不是默認(rèn)的DEFAULT_GROUP時,例如dev。需要在客戶端中配置spring.cloud.nacos.config.group=dev,指定配置所在的組。
- nacos中的配置格式不是默認(rèn)的properties時,需要在客戶端中增加
- spring.cloud.nacos.config.file-extension配置,指定配置的內(nèi)容文件格式
- nacos的Data ID 需要與${spring.cloud.nacos.config.prefix}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}值一致。當(dāng)spring.cloud.nacos.config.prefix沒有配置時,該值默認(rèn)為spring.application.name。當(dāng)spring.profile.active沒有配置時,則為空。
nacos數(shù)據(jù)持久化
1.新建nacos數(shù)據(jù)庫
2.執(zhí)行sql
在nacos/conf目錄下找到對應(yīng)sql,并執(zhí)行
3.修改conf/application.properties
在上面截圖中的application.properties,取消以下注釋,并修改對應(yīng)的鏈接,用戶名,密碼
Nacos集群
1.修改文件cluster.conf
(1).不要使用連號的端口,我使用連號的端口就一直啟動不起來
關(guān)于單機(jī)搭建nacos集群2.+版本啟動報端口被占用問題,詳細(xì)內(nèi)容,見文末補(bǔ)充介紹。
(2).不要使用127.0.0.1的ip,會導(dǎo)致最終nacos集群數(shù)據(jù)共享出現(xiàn)問題。配置127.0.0.1,可以看到當(dāng)服務(wù)啟動后,cluster.conf會被重寫,增加本機(jī)ip的一行數(shù)據(jù)。這個一定程度上算nacos的bug。
192.168.43.11:8848
192.168.43.11:8948
2.復(fù)制一份nacos服務(wù)端
修改port為8948后,分別啟動兩個nacos服務(wù)
3.使用nginx來做負(fù)載均衡
修改nginx.conf
upstream nacos{ server 127.0.0.1:8848; server 127.0.0.1:8948; } server { listen 8000; server_name nacos; location / { # 反向代理到上面的兩臺服務(wù)器 寫上自定義的名稱 proxy_pass http://nacos; } }
此時在使用8000端口,就可以輪訓(xùn)訪問nacos的集群。
補(bǔ)充:
單機(jī)搭建nacos集群2.+版本啟動報端口被占用問題。
異常信息:io.grpc.netty.shaded.io.netty.channel.unix.Errors$NativeIoException: bind(…) failed: 地址已在使用
原因:2.0版本的nacos需要四個端口,本機(jī)服務(wù)端口是連號如:8848/8849/8850第四個端口就會發(fā)生占用。
server.port(默認(rèn)8848) raft port: ${server.port} - 1000 grpc port: ${server.port} + 1000 grpc port for server: ${server.port} + 1001
解決辦法
將默認(rèn)端口分開 不連號即可。核心就是避免第四個端口 grpc port for server = ${server.port} + 1001被占用。
到此這篇關(guān)于SpringCloud Alibaba環(huán)境集成之nacos詳解的文章就介紹到這了,更多相關(guān)Spring Cloud Alibaba 整合Nacos內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringCloud Hystrix熔斷器使用方法介紹
- SpringCloud Gateway動態(tài)路由配置詳解
- Spring?Cloud?Gateway遠(yuǎn)程命令執(zhí)行漏洞分析(CVE-2022-22947)
- SpringSecurit鹽值加密的密碼驗證以及強(qiáng)密碼驗證過程
- Spring?Cloud?Alibaba實現(xiàn)服務(wù)的無損下線功能(案例講解)
- springcloud-gateway集成knife4j的示例詳解
- Spring?Cloud?Ribbon?負(fù)載均衡使用策略示例詳解
- SpringCloud @RefreshScope刷新機(jī)制深入探究
- SpringCloud?@RefreshScope刷新機(jī)制淺析
- SpringCloud啟動失敗問題匯總
- 一文吃透Spring?Cloud?gateway自定義錯誤處理Handler
- SpringCloud Gateway路由組件詳解
- SpringCloud OpenFeign基本介紹與實現(xiàn)示例
- Spring Cloud Gateway替代zuul作為API網(wǎng)關(guān)的方法
- SpringCloud使用Feign實現(xiàn)遠(yuǎn)程調(diào)用流程詳細(xì)介紹
- SpringCloud修改Feign日志記錄級別過程淺析
- SpringCloud開啟session共享并存儲到Redis的實現(xiàn)
- Spring?Cloud原理以及核心組件詳解
相關(guān)文章
關(guān)于Java的Condition接口最佳理解方式
這篇文章主要介紹了關(guān)于Java的Condition接口最佳理解方式,Condition就是實現(xiàn)了管程里面的條件變量,Java?語言內(nèi)置的管程里只有一個條件變量,而Lock&Condition實現(xiàn)的管程支持多個條件變量,需要的朋友可以參考下2023-05-05Spring Boot + Kotlin整合MyBatis的方法教程
前幾天由于工作需要,便開始學(xué)習(xí)了kotlin,java基礎(chǔ)扎實學(xué)起來也還算比較快,對于kotlin這個編程語言自然是比java有趣一些,下面這篇文章主要給大家介紹了關(guān)于Spring Boot + Kotlin整合MyBatis的方法教程,需要的朋友可以參考下。2018-01-01Jpa 如何使用@EntityListeners 實現(xiàn)實體對象的自動賦值
這篇文章主要介紹了Jpa 如何使用@EntityListeners 實現(xiàn)實體對象的自動賦值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08