成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Nacos系列:基于Nacos的配置中心

ralap / 791人閱讀

摘要:殺只雞而已,你拿牛刀來做甚釋義小團(tuán)隊(duì)小項(xiàng)目選擇簡(jiǎn)單的配置管理方式就好了,要什么配置中心,純屬?zèng)]事找事。,我就啰嗦到這里吧,下面正式介紹作為配置中心是怎么使用的。

前言

在看正文之前,我想請(qǐng)你回顧一下自己待過的公司都是怎么管理配置的,我想應(yīng)該會(huì)有以下幾種方式:

1、硬編碼
沒有什么配置不配置的,直接寫在代碼里面,比如使用常量類
優(yōu)勢(shì):對(duì)開發(fā)友好,開發(fā)清楚地知道代碼需要用到什么配置
劣勢(shì):涉及秘鑰等敏感配置直接暴露給開發(fā)人員,不安全;如果想修改配置必須重新發(fā)版,比較麻煩

2、外部化配置文件
Spring項(xiàng)目經(jīng)常會(huì)在resoures目錄下放很多配置文件,各個(gè)環(huán)境對(duì)應(yīng)不同的配置文件,通過SVN管理
優(yōu)勢(shì):配置文件外部化,支持多環(huán)境配置管理,修改配置只需重啟服務(wù),無需發(fā)版
劣勢(shì):系統(tǒng)龐大時(shí),配置文件很多,多人開發(fā),配置格式不統(tǒng)一,維護(hù)麻煩;敏感配置不需要暴露給開發(fā)人員,降低風(fēng)險(xiǎn),但開發(fā)經(jīng)常要和運(yùn)維溝通怎么修改配置,溝通不恰當(dāng)容易引發(fā)生產(chǎn)事故;而且,如果應(yīng)用部署在多臺(tái)機(jī)器,對(duì)運(yùn)維來說,修改配置也是非常頭疼的事情(當(dāng)然也可以引入NFS系統(tǒng)來解決一部分問題)

3、數(shù)據(jù)庫
配置信息存儲(chǔ)在數(shù)據(jù)庫中,靈活修改
優(yōu)勢(shì):可以靈活管理配置,無需重啟服務(wù)
劣勢(shì):界面不友好,配置沒有版本管理,一旦出現(xiàn)問題,回滾或定位問題都比較麻煩;此外,數(shù)據(jù)庫必須要保證高可用,避免因此而造成生產(chǎn)故障

4、配置中心
微服務(wù)基礎(chǔ)架構(gòu)體系中的一個(gè)不可或缺的基礎(chǔ)組件
優(yōu)勢(shì):集中化管理,敏感配置可控;多版本存儲(chǔ),方便追溯;界面友好,修改配置一鍵發(fā)布;即使面對(duì)多集群也能從容應(yīng)對(duì),十分淡定
劣勢(shì):引入組件,增加系統(tǒng)風(fēng)險(xiǎn);如果是中途切換成配置中心,也會(huì)增加研發(fā)接入成本;配置中心也需要保證高可用,否則容易造成大面積影響

以上幾種管理配置文件的方式,我想都會(huì)有公司在用,不要因?yàn)榕渲弥行挠兄T多優(yōu)點(diǎn),就盲目引進(jìn)項(xiàng)目中,我覺得應(yīng)該遵守以下兩個(gè)原則:

做人做事,要知道自己幾斤幾兩

釋義:沒深入研究過的技術(shù),就不要隨便拿到公司項(xiàng)目中來試水啦,恐怕到時(shí)候坑夠你填的,要不然就是你有信心玩得轉(zhuǎn)它。

殺只雞而已,你拿牛刀來做甚?

釋義:小團(tuán)隊(duì)小項(xiàng)目選擇簡(jiǎn)單的配置管理方式就好了,要什么配置中心,純屬?zèng)]事找事。

總而言之,我們必須從實(shí)際出發(fā),實(shí)事求是,選擇適合自己的技術(shù)棧。

關(guān)于為什么需要有配置中心,我推薦一篇文章給你看,講得比較透徹:《微服務(wù)架構(gòu)為什么需要配置中心?》

另外,我覺得對(duì)開發(fā)本身來說,是寧愿自己管理自己代碼的配置的,交給運(yùn)維總是會(huì)有各種各樣的問題,至于敏感配置,說實(shí)話,開發(fā)人員要真想做點(diǎn)“壞事”,那攔得住嗎?但是,從公司的角度來講,把服務(wù)器的配置管理交給運(yùn)維同事是符合常理的,系統(tǒng)需要穩(wěn)定且安全地運(yùn)行,這是對(duì)客戶的負(fù)責(zé),從這一方面去思考,這么做是合情合理的。

Okay,我就啰嗦到這里吧,下面正式介紹Nacos作為配置中心是怎么使用的。

Nacos 結(jié)合 Spring

添加 maven 依賴:


    com.alibaba.nacos
    nacos-spring-context
    ${nacos-spring-context.version}

使用 @EnableNacosConfig 開啟 Nacos Spring 的配置管理功能

@Configuration
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
@NacosPropertySource(dataId = "nacos.spring.config", autoRefreshed = true)
public class NacosConfig {
}

其中:

@Configuration:Spring的注解,配置應(yīng)用上下文
@EnableNacosConfig:Nacos的注解,啟用 Nacos Spring 的配置管理服務(wù)
@NacosProperties:全局和自定義Nacos屬性的統(tǒng)一注解
@NacosPropertySource:加載數(shù)據(jù)源
globalProperties:全局 Nacos 屬性
serverAddr:Nacos Server服務(wù)器地址
dataId:配置的數(shù)據(jù)集ID
autoRefreshed:是否開啟配置動(dòng)態(tài)更新

再寫一個(gè)Controller類,來驗(yàn)證Nacos的配置管理功能,代碼如下:

package com.learn.nacos;

import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.annotation.NacosValue;
import com.alibaba.nacos.api.exception.NacosException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping(value = "config")
public class NacosConfigController {
     @NacosInjected
     private ConfigService configService;

     @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
     private boolean useLocalCache;

     @RequestMapping(value = "/get", method = RequestMethod.GET)
     @ResponseBody
     public boolean get() {
         return useLocalCache;
     }

     @RequestMapping(method = RequestMethod.GET)
     @ResponseBody
     public ResponseEntity publish(@RequestParam String dataId,
                                           @RequestParam(defaultValue = "DEFAULT_GROUP") String group,
                                           @RequestParam String content) throws NacosException {
         boolean result = configService.publishConfig(dataId, group, content);
         if (result) {
             return new ResponseEntity("Success", HttpStatus.OK);
         }
         return new ResponseEntity("Fail", HttpStatus.INTERNAL_SERVER_ERROR);
     }
}

該Controller類提供了兩個(gè)HTTP接口
讀取配置:http://127.0.0.1:8080/config/get
發(fā)布配置:http://127.0.0.1:8080/config?dataId=XXX&content=XXX

發(fā)布配置還可以通過 Nacos Open API:curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=XXX&group=XXX&content=XXX 發(fā)布配置,你也可以用Postman工具模擬POST請(qǐng)求進(jìn)行配置發(fā)布,我這里主要是為了方便驗(yàn)證問題,采用了這種方式。

在驗(yàn)證之前,請(qǐng)先確保 Nacos Server 已經(jīng)啟動(dòng),Nacos Server 的安裝及啟動(dòng)方式詳見:《Nacos系列:歡迎來到Nacos的世界!》

啟動(dòng)Tomcat,觀察Console控制臺(tái)

20:50:13.646 [RMI TCP Connection(5)-127.0.0.1] WARN com.alibaba.nacos.spring.core.env.AnnotationNacosPropertySourceBuilder - There is no content for NacosPropertySource from dataId[nacos.spring.config] , groupId[DEFAULT_GROUP] , properties[{encode=${nacos.encode:UTF-8}, namespace=${nacos.namespace:}, contextPath=${nacos.context-path:}, endpoint=${nacos.endpoint:}, serverAddr=${nacos.server-addr:}, secretKey=${nacos.secret-key:}, accessKey=${nacos.access-key:}, clusterName=${nacos.cluster-name:}}].

20:50:17.825 [RMI TCP Connection(5)-127.0.0.1] INFO com.alibaba.nacos.spring.context.event.LoggingNacosConfigMetadataEventListener - Nacos Config Metadata : dataId="nacos.spring.config", groupId="DEFAULT_GROUP", beanName="nacosConfig", bean="null", beanType="class com.learn.nacos.NacosConfig", annotatedElement="null", xmlResource="null", nacosProperties="{serverAddr=127.0.0.1:8848, encode=UTF-8}", nacosPropertiesAttributes="{encode=${nacos.encode:UTF-8}, namespace=${nacos.namespace:}, contextPath=${nacos.context-path:}, endpoint=${nacos.endpoint:}, serverAddr=${nacos.server-addr:}, secretKey=${nacos.secret-key:}, accessKey=${nacos.access-key:}, clusterName=${nacos.cluster-name:}}", source="org.springframework.core.type.classreading.AnnotationMetadataReadingVisitor@66e4d430", timestamp="1550753413647"

我們先通過http://127.0.0.1:8080/config?dataId=nacos.spring.config&content=useLocalCache=true發(fā)布一個(gè)dataId為nacos.spring.config且配置內(nèi)容為useLocalCache=true的配置集,觀察Nacos控制臺(tái)的變化

再通過http://127.0.0.1:8080/config/get讀取配置

然后在Nacos控制臺(tái)將useLocalCache的值改為false,并發(fā)布配置

再次訪問http://127.0.0.1:8080/config/get

Nacos 結(jié)合 Spring Boot

添加 Starter 依賴:


    com.alibaba.boot
    nacos-config-spring-boot-starter
    0.2.1
注意:版本 0.2.x.RELEASE 對(duì)應(yīng)的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 對(duì)應(yīng)的是 Spring Boot 1.x 版本。

application.properties中添加如下配置信息:

nacos.config.server-addr=127.0.0.1:8848

添加NacosConfigApplication啟動(dòng)類

@SpringBootApplication
@NacosPropertySource(dataId = "nacos.springboot.config", autoRefreshed = true)
public class NacosConfigApplication {
     public static void main(String[] args) {
         SpringApplication.run(NacosConfigApplication.class, args);
     }
}

如果你看過我的上一篇文章:《Nacos系列:基于Nacos的注冊(cè)中心》,那么你應(yīng)該知道 Spring Boot 實(shí)現(xiàn)方式和 Spring 的沒太大差別,所以我就不再細(xì)說了,請(qǐng)參考我的示例源碼或者官網(wǎng)資料學(xué)習(xí)。

這里說下我在學(xué)習(xí)過程中遇到的一個(gè)問題,在application.properties添加配置文件的時(shí)候,不小心將nacos.config.server-addr寫成了nacos.discovery.server-addr,結(jié)果啟動(dòng)項(xiàng)目時(shí),一直報(bào)錯(cuò):

ERROR 9028 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

------

APPLICATION FAILED TO START

------

Description:

client error: invalid param. null

Action:

please check your client configuration

剛開始一直找不到原因,后面對(duì)著官網(wǎng)代碼示例復(fù)核,才發(fā)現(xiàn)是配置問題導(dǎo)致的,呵呵噠,自己給自己挖坑。

后語

我挺喜歡Nacos的,既能做服務(wù)發(fā)現(xiàn)和管理,又能做配置管理,這兩者本質(zhì)沒多大區(qū)別,Nacos把這兩者統(tǒng)一起來,一舉兩得,我覺得沒什么不好,要不然你引入了Zookeeper作為注冊(cè)中心,還要引入Apollo作為配置中心,無端增加學(xué)習(xí)成本。就像之前聽音樂,我一般用網(wǎng)易云音樂就好,后面因?yàn)楦懔税鏅?quán)的事,不得不下載了蝦米和QQ音樂,我就聽個(gè)歌而已,手機(jī)里裝了三個(gè)APP,你說,這叫什么事兒?

示例源碼

Nacos + Springlearn-nacos-spring-config

Nacos + Spring Bootlearn-nacos-springboot-config

代碼已上傳至碼云Github上,歡迎下載學(xué)習(xí)

Gitee

Github

參考資料

微服務(wù)架構(gòu)為什么需要配置中心?

Nacos Spring 快速開始

Nacos Spring Boot 快速開始

SpringBoot使用Nacos配置中心

Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos作為配置中心

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73358.html

相關(guān)文章

  • Nacos系列基于Nacos注冊(cè)中心

    摘要:在上面這個(gè)例子中,沃爾瑪就是服務(wù)提供者,小明和小新是服務(wù)消費(fèi)者,微信公眾號(hào)類似于注冊(cè)中心,沃爾瑪將服務(wù)發(fā)布到注冊(cè)中心,小明和小新作為消費(fèi)者,訂閱注冊(cè)中心上沃爾瑪提供的服務(wù),通過微信公眾號(hào),沃爾瑪服務(wù)方和小明小新消費(fèi)方就解耦了。 前言 所謂注冊(cè)中心,其實(shí)是分布式架構(gòu)演進(jìn)過程中的產(chǎn)物,在系統(tǒng)中充當(dāng)一個(gè)協(xié)調(diào)者的角色。但是,為什么需要這樣一個(gè)協(xié)調(diào)者的角色呢?我們先來看一個(gè)例子,以便理解為什么分...

    Kylin_Mountain 評(píng)論0 收藏0
  • Nacos系列Nacos三種部署模式

    摘要:數(shù)據(jù)源內(nèi)嵌的數(shù)據(jù)庫,通過命令直接啟動(dòng)即可,無需額外安裝。參考資料部署手冊(cè)集群部署說明推薦閱讀系列歡迎來到的世界系列基于的注冊(cè)中心系列基于的配置中心系列的使用 三種部署模式 Nacos支持三種部署模式 1、單機(jī)模式:可用于測(cè)試和單機(jī)使用,生產(chǎn)環(huán)境切忌使用單機(jī)模式(滿足不了高可用) 2、集群模式:可用于生產(chǎn)環(huán)境,確保高可用 3、多集群模式:可用于多數(shù)據(jù)中心場(chǎng)景 單機(jī)模式 啟動(dòng) Nacos ...

    vibiu 評(píng)論0 收藏0
  • Nacos系列NacosJava SDK使用

    摘要:發(fā)布配置支持程序自動(dòng)發(fā)布配置,創(chuàng)建和修改配置使用同一個(gè)方法,配置不存在則創(chuàng)建配置已存在則更新。示例源碼項(xiàng)目代碼已上傳至碼云和上,歡迎下載學(xué)習(xí)參考資料用戶指南的推薦閱讀系列歡迎來到的世界系列基于的注冊(cè)中心系列基于的配置中心 Maven依賴 Nacos提供完整的Java SDK,便于配置管理和服務(wù)發(fā)現(xiàn)及管理,以 Nacos-0.8.0 版本為例 添加Maven依賴: com.al...

    LinkedME2016 評(píng)論0 收藏0
  • Nacos系列:歡迎來到Nacos世界!

    摘要:元數(shù)據(jù)數(shù)據(jù)如配置和服務(wù)描述信息,如服務(wù)版本權(quán)重容災(zāi)策略負(fù)載均衡策略鑒權(quán)配置各種自定義標(biāo)簽,從作用范圍來看,分為服務(wù)級(jí)別的元信息集群的元信息及實(shí)例的元信息。 什么是Nacos? Nacos 是構(gòu)建以服務(wù)為中心的現(xiàn)代應(yīng)用架構(gòu) (例如微服務(wù)范式、云原生范式) 的服務(wù)基礎(chǔ)設(shè)施。 Nacos可以做什么? 1、動(dòng)態(tài)配置服務(wù):支持以中心化、外部化和動(dòng)態(tài)化的方式管理所有環(huán)境的配置。動(dòng)態(tài)配置消除了配置變...

    waruqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<