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

歡迎訪問 生活随笔!

生活随笔

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

javascript

(基础)SpringCloud Alibaba Nacos作为多环境配置中心

發(fā)布時間:2023/12/18 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (基础)SpringCloud Alibaba Nacos作为多环境配置中心 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

配置 (Configuration)

配置的目錄

為未知留下退路

舉個簡單的例子

logLevel = INFO

系統(tǒng)正常飛行的時候,我們希望其只輸出INFO級別的日志信息,在生產(chǎn)環(huán)境中我們甚至希望只輸出WARNING/ERROR級別的日志,系統(tǒng)出毛病了,再將日志輸出動態(tài)的調(diào)整成包含診斷信息的DEBUG級別或者TRACE級別。

肯定不能所有應(yīng)用都修改日志級別,不然當(dāng)降低系統(tǒng)日志輸出級別時,會出現(xiàn)大部分系統(tǒng)資源用于打印日志了。

這一般用于預(yù)發(fā)布環(huán)境出現(xiàn)BUG時,這時一般只有灰度發(fā)布的幾臺機器調(diào)低日志級別。之前京東某系統(tǒng)就因不小心調(diào)低了日志級別導(dǎo)致整個系統(tǒng)所有鏈路監(jiān)控報警。

配置文件

在那個單機即系統(tǒng)的時代,我們基本都是在用配置文件來存儲配置項,一個配置項,就是如上面的logLevel那樣的一個含有 = 表達(dá)式。
而一個配置文件一般是一組配置項的集合或者叫配置集,一個系統(tǒng)根據(jù)邏輯模塊劃分,可以有1到多個配置文件。如下圖 :

分布式系統(tǒng)給系統(tǒng)配置管理帶來的挑戰(zhàn)

毫無疑問今天阿里的系統(tǒng)就是一個大型的、服務(wù)化的、復(fù)雜的、分布式系統(tǒng)實現(xiàn)之一。在這個領(lǐng)域有3本書值得反復(fù)閱讀<<分布式系統(tǒng)概念與設(shè)計>> <<分布式系統(tǒng)原理與泛型>> 以及 Distributed Systems For System Architects,有意思的是這三本書只有最后一本在21.3小節(jié)簡單的提了一下 Configuration Of Distributed Systems,里面簡單的說了一下靜態(tài)配置和動態(tài)配置的概念和區(qū)別 “…System configuration may be static or dynamic…”. 這說明什么? 這說明我們阿里技術(shù)人包括我們中間件今天面臨的很多問題和領(lǐng)域已經(jīng)進(jìn)入深水區(qū),已經(jīng)沒有人會直接給你提供這個領(lǐng)域清晰的解決方案,我們自己正站在前沿,而我們的成功的或者失敗的探索,其經(jīng)驗和成果都應(yīng)該總結(jié)并分享給整個業(yè)界。

配置與環(huán)境

  • 線程池、連接池大小
  • 開關(guān)、預(yù)案、限流配置
  • 數(shù)據(jù)源主備容災(zāi)切換(目前一般數(shù)據(jù)庫都是采用域名訪問)
  • 路由規(guī)則(如網(wǎng)關(guān))
  • “在開發(fā)環(huán)境中將logLevel設(shè)置為DEBUG,在預(yù)發(fā)環(huán)境logLevel設(shè)置為INFO,生產(chǎn)環(huán)境里logLevel設(shè)置為WARNING”

    “在日常環(huán)境執(zhí)行線程池的最大線程數(shù)應(yīng)該設(shè)置為15,而生產(chǎn)環(huán)境上這個值應(yīng)該大一點,默認(rèn)設(shè)為150”

    “在線上環(huán)境中,中心機房,應(yīng)用數(shù)據(jù)源需要連接A庫,而S機房,應(yīng)用應(yīng)該就近連接使用B庫”

    “只有在T環(huán)境,雙向同步開關(guān)才應(yīng)該關(guān)閉”

    “這次的改動有點大,新的特性僅在線上的H單元把該特性開放出來,其它的單元環(huán)境先不要開放出來”

    Nacos環(huán)境搭建

    先通過鏈接可以下載Nacos的最新發(fā)行版,這里我們選擇1.1.4版本的Nacos

    https://github.com/alibaba/nacos/releases


    下載后解壓:
    我是直接用的1.3的當(dāng)時在家下載github上的東西太慢了就懶得下直接用1.3的也是沒問題滴。
    接著雙擊下面的鍵就可以運行了。


    但是我們還是配成自己的數(shù)據(jù)庫安全方便一點他也給出了sql文件在conf文件夾下面。

    然后我們配置下連接數(shù)據(jù)的配置打開application.properties。

    填上自己的數(shù)據(jù)庫配置信息就行。

    接著啟動nacos啟動好的狀態(tài)如下圖。

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

    使用springcloud整合nacos


    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.15.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>lyj</groupId><artifactId>nacos-config</artifactId><version>0.0.1-SNAPSHOT</version><name>nacos-config</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Edgware.SR4</spring-cloud.version></properties><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency>--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.2</version><optional>true</optional></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>0.2.2.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

    項目結(jié)構(gòu)


    boostrap.yml的配置:記住一定要是bootstrap.yml而不是application.yml

    注意:這里必須使用bootstrap.properties。同時,spring.application.name值必須與上一階段Nacos中創(chuàng)建的配置Data Id匹配(除了.properties或者.yaml后綴)。

    spring:application:name: nacos-configcloud:nacos:config:server-addr: 127.0.0.1:8848prefix: nacos-configfile-extension: yamlprofiles:active: dev server:port: 8081

    集成

    package lyj;import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;@SpringBootApplication public class NacosConfigApplication {public static void main(String[] args) {SpringApplication.run(NacosConfigApplication.class, args);}@Slf4j@RestController@RefreshScopestatic class TestController{@Value("${didispace.title:}")private String title;@GetMapping("/test")public String hello() {log.info("title:" + title);return title;}}}

    @SpringBootApplication定義是個Spring Boot應(yīng)用;還定義了一個Controller,其中通過@Value注解,注入了key為didispace.title的配置(默認(rèn)為空字符串),這個配置會通過/test接口返回,后續(xù)我們會通過這個接口來驗證Nacos中配置的加載。另外,這里還有一個比較重要的注解@RefreshScope,主要用來讓這個類下的配置內(nèi)容支持動態(tài)刷新,也就是當(dāng)我們的應(yīng)用啟動之后,修改了Nacos中的配置內(nèi)容之后,這里也會馬上生效。

    啟動項目,接著進(jìn)入Nacos的控制頁面,在配置列表功能頁面中,點擊右上角的“+”按鈕,進(jìn)入“新建配置”頁面,如下圖填寫內(nèi)容:

    照著圖中填寫完發(fā)布即可。

    Data ID:填入nacos-config.yaml Group:不修改,使用默認(rèn)值DEFAULT_GROUP 配置格式:選擇yaml 配置內(nèi)容:應(yīng)用要加載的配置內(nèi)容,這里僅作為示例,做簡單配置,比如:didispace: title: iclyj

    訪問接口:

    可以看到已經(jīng)讀取到nacos配置信息中的title數(shù)據(jù),接著我們不重啟項目改動nacos中配置中的didispace: title: 數(shù)據(jù)為 “l(fā)yj” 點擊發(fā)布 然后 再訪問接口:


    可以看到信心已經(jīng)動態(tài)的更新了。到此nacos搭建和基本的使用就已經(jīng)完成了。整合項目已經(jīng)上傳到github歡迎大家給個star謝謝各位大佬。

    git@github.com:CXLYJ/nacos-config.git

    集成2

    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)用啟動類** Created by bambo on 19/2/7.*/ // Spring Boot 應(yīng)用的標(biāo)識 @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ā)布,然后啟動springboot服務(wù),訪問http://localhost:8080/test可以看到結(jié)果如下,說明成功了,如果修改這個值再發(fā)布,刷新url值也會更接著變化。自動刷新的基本功能就實現(xiàn)了。
    bamboo

    Nacos功能

    nacos server的集群部署

    集群部署架構(gòu)圖
    官方的推薦部署架構(gòu)圖:
    [外鏈圖片轉(zhuǎn)存失敗(img-x4go827X-1568616387514)(https://nacos.io/img/deployDnsVipMode.jpg)]
    推薦用戶把所有服務(wù)列表放到一個vip(虛擬IP,主機宕機后可以自動漂移到備用機器上)下面,然后掛到一個域名下面
    http://ip1:port/openAPI 直連ip模式,機器掛則需要修改ip才可以使用。
    http://VIP:port/openAPI 掛載VIP模式,直連vip即可,下面掛server真實ip,可讀性不好。
    http://nacos.com:port/openAPI 域名+VIP模式,可讀性好,而且換ip方便,推薦模式

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

    步驟如下:
    1.conf文件夾下的文件如下圖所示,其中下載的壓縮包解壓出來是沒有cluster.conf的,通過復(fù)制cluster.conf-example并修改文件名得來。
    修改cluster.conf,將部署nacos server的三臺服務(wù)器ip地址寫上即可
    三臺服務(wù)器cluster.conf文件相同,都是協(xié)商這三個IP地址即可
    #it is ip
    #example
    114.116.137.***
    132.232.159.***
    47.107.122.***

    2.分別啟動三臺nacos server
    修改客戶端,在客戶端的bootstrap.properties文件中修改server的IP地址
    注:修改成自己的三臺服務(wù)器ip地址,用逗號分隔
    spring.cloud.nacos.config.server-addr=114.116.137.***:8848,132.232.159.***:8848,47.107.122.***:8848

    參考

    https://www.sohu.com/a/116745628_466839
    https://spring.io/blog/2011/02/15/spring-3-1-m1-unified-property-management/
    https://www.jianshu.com/p/d78fa8412cbf
    https://blog.csdn.net/zjcjava/article/details/88316190
    https://www.mayi888.com/archives/57402(重點)
    https://www.cnblogs.com/joker-dj/p/12768975.html
    https://www.cnblogs.com/nijunyang/p/12313572.html(nacos相關(guān)概念及數(shù)據(jù)模型)
    https://edu.csdn.net/course/detail/25600/310603(nacos視頻學(xué)習(xí),墻裂推薦)

    總結(jié)

    以上是生活随笔為你收集整理的(基础)SpringCloud Alibaba Nacos作为多环境配置中心的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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