日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

SpringBoot使用Nacos作为配置中心服务和服务注册中心

發(fā)布時(shí)間:2023/12/18 javascript 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot使用Nacos作为配置中心服务和服务注册中心 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SpringBoot使用Nacos作為配置中心服務(wù)和服務(wù)注冊(cè)中心

簡(jiǎn)介

從spring開(kāi)始,所有的配置文件都放在項(xiàng)目中,如果需要修改配置文件內(nèi)容,則需要登陸服務(wù)器重啟服務(wù)。想象一下如果你有一百臺(tái)服務(wù)的需要修改,那是不可想象的工作量。

?

目前已有的配置中心

  • 攜程開(kāi)源的Apollo:數(shù)據(jù)保存在mysql中,支持命名空間和分發(fā)更新配置
  • springcloud 中的springcloud config:必須使用git保存配置信息
  • 阿里的開(kāi)源Nacos

其他項(xiàng)目未關(guān)注
最次的就是springcloud config 必須從git,svn才能更新

Nacos 有三大主要功能:

  • 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測(cè)

Nacos 支持基于 DNS 和基于 RPC 的服務(wù)發(fā)現(xiàn)。服務(wù)提供者使用 原生SDK、OpenAPI、或一個(gè)獨(dú)立的Agent TODO注冊(cè) Service 后,服務(wù)消費(fèi)者可以使用DNS TODO 或HTTP&API查找和發(fā)現(xiàn)服務(wù)。
Nacos 提供對(duì)服務(wù)的實(shí)時(shí)的健康檢查,阻止向不健康的主機(jī)或服務(wù)實(shí)例發(fā)送請(qǐng)求。Nacos 支持傳輸層 (PING 或 TCP)和應(yīng)用層 (如 HTTP、MySQL、用戶自定義)的健康檢查。 對(duì)于復(fù)雜的云環(huán)境和網(wǎng)絡(luò)拓?fù)洵h(huán)境中(如 VPC、邊緣網(wǎng)絡(luò)等)服務(wù)的健康檢查,Nacos 提供了 agent 上報(bào)模式和服務(wù)端主動(dòng)檢測(cè)2種健康檢查模式。Nacos 還提供了統(tǒng)一的健康檢查儀表盤(pán),幫助您根據(jù)健康狀態(tài)管理服務(wù)的可用性及流量。

?

  • 動(dòng)態(tài)配置服務(wù)

動(dòng)態(tài)配置服務(wù)可以讓您以中心化、外部化和動(dòng)態(tài)化的方式管理所有環(huán)境的應(yīng)用配置和服務(wù)配置。
動(dòng)態(tài)配置消除了配置變更時(shí)重新部署應(yīng)用和服務(wù)的需要,讓配置管理變得更加高效和敏捷。
配置中心化管理讓實(shí)現(xiàn)無(wú)狀態(tài)服務(wù)變得更簡(jiǎn)單,讓服務(wù)按需彈性擴(kuò)展變得更容易。
Nacos 提供了一個(gè)簡(jiǎn)潔易用的UI (控制臺(tái)樣例 Demo) 幫助您管理所有的服務(wù)和應(yīng)用的配置。Nacos 還提供包括配置版本跟蹤、金絲雀發(fā)布、一鍵回滾配置以及客戶端配置更新?tīng)顟B(tài)跟蹤在內(nèi)的一系列開(kāi)箱即用的配置管理特性,幫助您更安全地在生產(chǎn)環(huán)境中管理配置變更和降低配置變更帶來(lái)的風(fēng)險(xiǎn)。

?

  • 動(dòng)態(tài) DNS 服務(wù)

動(dòng)態(tài) DNS 服務(wù)支持權(quán)重路由,讓您更容易地實(shí)現(xiàn)中間層負(fù)載均衡、更靈活的路由策略、流量控制以及數(shù)據(jù)中心內(nèi)網(wǎng)的簡(jiǎn)單DNS解析服務(wù)。動(dòng)態(tài)DNS服務(wù)還能讓您更容易地實(shí)現(xiàn)以 DNS 協(xié)議為基礎(chǔ)的服務(wù)發(fā)現(xiàn),以幫助您消除耦合到廠商私有服務(wù)發(fā)現(xiàn) API 上的風(fēng)險(xiǎn)。
Nacos 提供了一些簡(jiǎn)單的 DNS APIs TODO 幫助您管理服務(wù)的關(guān)聯(lián)域名和可用的 IP:PORT 列表.

?

  • 服務(wù)及其元數(shù)據(jù)管理

Nacos 能讓您從微服務(wù)平臺(tái)建設(shè)的視角管理數(shù)據(jù)中心的所有服務(wù)及元數(shù)據(jù),包括管理服務(wù)的描述、生命周期、服務(wù)的靜態(tài)依賴分析、服務(wù)的健康狀態(tài)、服務(wù)的流量管理、路由及安全策略、服務(wù)的 SLA 以及最首要的 metrics 統(tǒng)計(jì)數(shù)據(jù)。


Nacos 確實(shí)是極易上手,幾乎免安裝,只需要簡(jiǎn)單的解壓包, 啟動(dòng) server 即可,它除了提供配置中心還提供注冊(cè)中心的作用,可以替代Eureka。
不足。但是官方特別強(qiáng)調(diào)了 Nacos v0.8.0 Production Ready 之前不建議在生產(chǎn)上大規(guī)模使用,建議使用之后版本在穩(wěn)定性上要高很多。
Spring Cloud支持使用Eureka、Zookeeper、Consul實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)的能力。Eureka 是其默認(rèn)的也是推薦的服務(wù)注冊(cè)中心組件。但從Eureka切換成Zookeeper、consul只需要改個(gè)依賴,加兩行配置就可以了。

辟謠
Eureka沒(méi)有閉源,是Eurkea 2.x分支不再維護(hù)!
Spring Cloud并不強(qiáng)依賴Eureka,不要過(guò)分解讀

?

簡(jiǎn)單入門(mén)

官方demo https://github.com/nacos-group/nacos-examples/blob/master/nacos-spring-boot-example
官方git上是有它的demo的,我這里有寫(xiě)了一下
本文配置中心demo源碼如下:
https://github.com/BambooZhang/springboot-study.git

服務(wù)中心安裝和啟動(dòng)

1.JDK環(huán)境
2.直接去官網(wǎng)git上下載 tar.gz或者zip格式到本地。
https://github.com/alibaba/nacos

windows安裝方式
解壓后,直接雙擊starup.bat

centos

unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz cd nacos/bin #啟動(dòng) sh startup.sh -m standalone


啟動(dòng)成功后
訪問(wèn)http://localhost:8848/nacos/index.html即可看到如下管理界面

nacos賬號(hào)密碼默認(rèn)都是:nacos

springboot客戶端
新建一個(gè)springboot工程,我這里直接拷貝了一個(gè)springboot項(xiàng)目,修改文件名和工程名以及pom

pom如下

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>springboot</groupId><artifactId>springboot-nacos</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-nacos :: 整合 nacos配置中心</name><!-- Spring Boot 啟動(dòng)父依賴 --><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.3.RELEASE</version></parent><properties><nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version></properties><dependencies><!-- Spring Boot Web 依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot Test 依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- nacos 依賴 --><dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-config-spring-boot-starter</artifactId><version>${nacos-config-spring-boot.version}</version></dependency><!-- Junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies> </project>


啟動(dòng)類

package org.spring.springboot;import com.alibaba.nacos.api.config.annotation.NacosValue; import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController;import static org.springframework.web.bind.annotation.RequestMethod.GET;/*** Spring Boot 應(yīng)用啟動(dòng)類** Created by bambo on 19/2/7.*/ // Spring Boot 應(yīng)用的標(biāo)識(shí) @SpringBootApplication @RestController @NacosPropertySource(dataId = "bamboo.test", autoRefreshed = true) public class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}@NacosValue(value = "${service.name:1}", autoRefreshed = true)private String serverName;@RequestMapping(value = "/test", method = GET)@ResponseBodypublic String get() {return serverName;}}


配置文件
application.properties

nacos.config.server-addr=127.0.0.1:8848


配置中心配置

這里直接配置管理新增,注意默認(rèn)group不變哦

保存發(fā)布,然后啟動(dòng)springboot服務(wù),訪問(wèn)http://localhost:8080/test可以看到結(jié)果如下,說(shuō)明成功了,如果修改這個(gè)值再發(fā)布,刷新url值也會(huì)更接著變化。自動(dòng)刷新的基本功能就實(shí)現(xiàn)了

bamboo


擴(kuò)展知識(shí)

其他配置信息

客戶端配置文件類型設(shè)置
在bootstrap.properties文件中
spring.cloud.nacos.config.file-extension=properties,yml,yaml
屬性聲明從配置中心中讀取的配置文件格式
該配置的缺省值為properties,即默認(rèn)是讀取properties格式的配置文件。當(dāng)客戶端沒(méi)有配置該屬性,并且在nacos server添加的是yml格式的配置文件,則給客戶端會(huì)讀取不到配置文件,導(dǎo)致啟動(dòng)失敗。
非properties配置格式,必須添加如下配置才可生效

spring.cloud.nacos.config.file-extension=yml


根據(jù)profile設(shè)置不同的環(huán)境配置
springboot中我們可以通過(guò)配置spring.profiles.active 實(shí)現(xiàn)在開(kāi)發(fā)、測(cè)試、生產(chǎn)環(huán)境下采用不同的配置文件
同樣,我們同科可以在nacos server分別創(chuàng)建

${application.name}-dev.properties ${application.name}-test.properties ${application.name}-prod.properties


然后通過(guò)命令啟動(dòng)jar時(shí) 設(shè)置spring.profiles.active來(lái)實(shí)現(xiàn)不同環(huán)境下使用不同的配置文件。

java -jar nacos-client-0.0.1-SNAPSHOT.jar --spring.profiles.active=test


同樣也適用于yml/yaml文件,只是客戶端設(shè)置spring.cloud.nacos.config.file-extension=yaml具體可見(jiàn)上一個(gè)說(shuō)明

?

自定義group

在同一個(gè)group下,配置文件名不能重復(fù),所以當(dāng)需要?jiǎng)?chuàng)建文件名稱相同的兩個(gè)配置文件時(shí),將兩個(gè)配置文件創(chuàng)建在不同的group下即可。當(dāng)我們?cè)偻粋€(gè)group下創(chuàng)建一個(gè)已有的配置文件時(shí),nacos會(huì)將其視為配置文件的修改,而不是新建。
因此我們可以把group作為一個(gè)project名稱,相當(dāng)于pom中的artifactId來(lái)標(biāo)示不同的工程,每個(gè)工程擁有不同的配置文件即可。

但是如果創(chuàng)建了新的group那么客戶端需要顯式的配置group信息否則默認(rèn)DEFAULT_GROUP空間中會(huì)出現(xiàn)找不到或者配置信息不符合你真實(shí)想法的情況。

#spring.cloud.nacos.config.file-extension=yaml spring.cloud.nacos.config.group=bamboo_group


自定義 namespace 命名空間
相應(yīng)的如果是服務(wù),我們一般是按照一個(gè)服務(wù)一個(gè)隔離空間的,比如公司有兩個(gè)不同的業(yè)務(wù)項(xiàng)目都有amdin服務(wù),那么為了避免不會(huì)發(fā)生沖突,服務(wù)配置中就使用命名空間作為隔離開(kāi)來(lái)。

上圖我創(chuàng)建了一個(gè)private服務(wù)命名空間,這樣只有配置了該命名空間的服務(wù)客戶端才會(huì)找到,否則就找不到了

?

# 根據(jù)自己nacos server生成的命名空間ID進(jìn)行修改 spring.cloud.nacos.config.namespace=fd69214f-54f1-47e8-affb-d19bc6616c13

注:該配置必須放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace的值是 namespace 對(duì)應(yīng)的 id,id 值可以在 Nacos 的控制臺(tái)獲取。并且在添加配置時(shí)注意不要選擇其他的 namespace,否則將會(huì)導(dǎo)致讀取不到正確的配置。

?

服務(wù)中心使用mysql保存數(shù)據(jù)

在0.7版本之前,在單機(jī)模式時(shí)nacos使用嵌入式數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),不方便觀察數(shù)據(jù)存儲(chǔ)的基本情況。0.7版本增加了支持mysql數(shù)據(jù)源能力,具體的操作步驟:

1.安裝數(shù)據(jù)庫(kù),版本要求:5.6.5+
2.初始化mysql數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)初始化文件:nacos-mysql.sql
3.修改conf/application.properties文件,增加支持mysql數(shù)據(jù)源配置(目前只支持mysql),添加mysql數(shù)據(jù)源的url、用戶名和密碼。

具體操作:
1.在mysql server 新建數(shù)據(jù)庫(kù):nocas(名字自己隨意)
2.在nacos server的 conf目錄下找到nacos-mysql.sql 文件,并在創(chuàng)建的nacos數(shù)據(jù)庫(kù)下執(zhí)行表nacos-mysql.sql中的SQL語(yǔ)句
3.修改nacos server application.properties配置文件,修改后如下圖所示

# spring
?

server.contextPath=/nacos server.servlet.contextPath=/nacos server.port=8848spring.datasource.platform=mysqldb.num=1 db.url.0=jdbc:mysql://數(shù)據(jù)庫(kù)IP:端口號(hào)/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=數(shù)據(jù)庫(kù)用戶名 db.password=數(shù)據(jù)庫(kù)密碼


4.重啟Nacos server并添加配置文件,就可以看到mysql數(shù)據(jù)庫(kù)數(shù)據(jù)表中出現(xiàn)了自己的配置文件內(nèi)容

注:由嵌入式數(shù)據(jù)庫(kù)切換為mysql數(shù)據(jù)庫(kù)后,數(shù)據(jù)并不能自動(dòng)轉(zhuǎn)移到mysql中,導(dǎo)致之前的配置文件丟失

注 :當(dāng)然為了可用性較高,生產(chǎn)使用建議至少主備模式,或者采用高可用數(shù)據(jù)庫(kù)。

?

配置中心的高可用集群

nacos server的集群部署

集群部署架構(gòu)圖
官方的推薦部署架構(gòu)圖:

推薦用戶把所有服務(wù)列表放到一個(gè)vip(虛擬IP,主機(jī)宕機(jī)后可以自動(dòng)漂移到備用機(jī)器上)下面,然后掛到一個(gè)域名下面
http://ip1:port/openAPI 直連ip模式,機(jī)器掛則需要修改ip才可以使用。
http://VIP:port/openAPI 掛載VIP模式,直連vip即可,下面掛server真實(shí)ip,可讀性不好。
http://nacos.com:port/openAPI 域名+VIP模式,可讀性好,而且換ip方便,推薦模式

具體操作實(shí)踐
注:目前器群模式下不采用mysql作為配置文件的存儲(chǔ)方式,所以需要先配置為采用mysql數(shù)據(jù)源模式,我在上一篇博客中已經(jīng)說(shuō)明了,這里不再介紹,直接配置集群。

步驟如下:

1.conf文件夾下的文件如下圖所示,其中下載的壓縮包解壓出來(lái)是沒(méi)有cluster.conf的,通過(guò)復(fù)制cluster.conf-example并修改文件名得來(lái)。
修改cluster.conf,將部署nacos server的三臺(tái)服務(wù)器ip地址寫(xiě)上即可
三臺(tái)服務(wù)器cluster.conf文件相同,都是協(xié)商這三個(gè)IP地址即可

#it is ip #example 114.116.137.*** 132.232.159.*** 47.107.122.***



2.分別啟動(dòng)三臺(tái)nacos server
修改客戶端,在客戶端的bootstrap.properties文件中修改server的IP地址
注:修改成自己的三臺(tái)服務(wù)器ip地址,用逗號(hào)分隔

spring.cloud.nacos.config.server-addr=114.116.137.***:8848,132.232.159.***:8848,47.107.122.***:8848

?

啟動(dòng)客戶端 發(fā)現(xiàn)可以正常啟動(dòng)

## 更多功能
關(guān)于如何在這些生態(tài)中使用 Nacos,請(qǐng)參考以下文檔:

Nacos與Spring Cloud一起使用
Nacos與Kubernetes一起使用
Nacos與Dubbo一起使用
Nacos與gRPC一起使用
Nacos與Istio一起使用


?

總結(jié)

以上是生活随笔為你收集整理的SpringBoot使用Nacos作为配置中心服务和服务注册中心的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。