欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

聊聊SpringBoot使用Nacos進(jìn)行服務(wù)注冊(cè)發(fā)現(xiàn)與配置管理問題

 更新時(shí)間:2022年01月19日 11:02:01   作者:Throwable  
Nacos支持基于DNS和基于RPC的服務(wù)發(fā)現(xiàn)(可以作為springcloud的注冊(cè)中心)、動(dòng)態(tài)配置服務(wù)(可以做配置中心)、動(dòng)態(tài)?DNS?服務(wù)。本文重點(diǎn)給大家介紹SpringBoot使用Nacos進(jìn)行服務(wù)注冊(cè)發(fā)現(xiàn)與配置管理,感興趣的朋友一起看看吧

前提

最近由于業(yè)務(wù)發(fā)展,需要調(diào)研一套完善和主流的基礎(chǔ)架構(gòu),進(jìn)行中臺(tái)化(微服務(wù))的實(shí)施,考慮到技術(shù)棧切換到SOFAStack。既然整個(gè)體系都切換到螞蟻金服的技術(shù)棧,那么自然考慮一些基礎(chǔ)組件如服務(wù)注冊(cè)發(fā)現(xiàn)、配置管理等都切換為阿里的技術(shù)棧??紤]到目前比較熱的服務(wù)發(fā)現(xiàn)組件是Nacos,需要調(diào)研SpringBoot服務(wù)接入Nacos的可行性,為以后強(qiáng)制要求新服務(wù)使用SOFAStack + Nacos的技術(shù)棧進(jìn)行服務(wù)開發(fā)打下基礎(chǔ)。

Nacos簡介

Nacos英文全稱Dynamic Naming and Configuration Service,Na為naming/nameServer即注冊(cè)中心,co為configuration即注冊(cè)中心,service是指該注冊(cè)/配置中心都是以服務(wù)為核心。服務(wù)在nacos是一等公民

下面的簡介來源于Nacos的官網(wǎng):

Nacos致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos提供了一組簡單易用的特性集,幫助您快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。

Nacos幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺(tái)。Nacos是構(gòu)建以服務(wù)為中心的現(xiàn)代應(yīng)用架構(gòu)(例如微服務(wù)范式、云原生范式)的服務(wù)基礎(chǔ)設(shè)施。

Nacos地圖:

Nacos生態(tài)圖:

Nacos提供的發(fā)展地圖來看,它基本提供了目前微服務(wù)實(shí)施中一些核心問題:監(jiān)控、服務(wù)發(fā)現(xiàn)注冊(cè)、配置灰度發(fā)布、配置回滾等等。另外,它在生態(tài)上能夠融入目前主流的K8SDocker、SpringCloud、Consul、Zookeeper等等(有點(diǎn)像屏蔽底層細(xì)節(jié),只需少量配置就可以切換底層架構(gòu)的實(shí)現(xiàn)),這一點(diǎn)十分重要。目前Nacos在阿里云上提供了商用版本(記得有前輩說過開源的終極目標(biāo)就是商用,大概如此)。如果在項(xiàng)目中使用的是SpringCloud全家桶,引入Nacos以及它和SpringCloud之間的膠水層,可以完全替代Eureka組件的功能,替代和強(qiáng)化部分Spring Cloud Config的功能。

Nacos服務(wù)部署

Nacos-Server部署相對(duì)簡單,它的發(fā)布版本見Github的Releases頁面。下載完成后進(jìn)行解壓,Windows系下啟動(dòng)Nacos-Server只需進(jìn)入解壓后的${解壓目錄}\nacos\bin目錄,執(zhí)行startup.cmd即可,服務(wù)啟動(dòng)成功的結(jié)果如下:

單機(jī)模式在不修改配置的前提下直接啟動(dòng),使用的是內(nèi)存數(shù)據(jù)庫,重啟后數(shù)據(jù)會(huì)被清空。如果需要數(shù)據(jù)持久化,則需要建立數(shù)據(jù)庫,具體的步驟是:

  • 建表的腳本在${解壓目錄}\nacos\conf目錄下,見schema.sqlnacos-mysql.sql兩個(gè)文件。
  • 自行通過建表的腳本建立數(shù)據(jù)庫。
  • 需要指定數(shù)據(jù)庫,則需要修改${解壓目錄}\nacos\conf\application.properties,在文件的尾部追加數(shù)據(jù)源的連接配置,下面是官方給出的多數(shù)據(jù)源的例子:
# 需要確保多個(gè)數(shù)據(jù)源的用戶名和密碼一致
db.num=2
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.url.1=jdbc:mysql://11.163.152.9:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=nacos

測試獲取已經(jīng)注冊(cè)的服務(wù):

λ curl -X GET http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName
{"hosts":[],"name":"DEFAULT_GROUP@@nacos.naming.serviceName","clusters":""}

訪問http://127.0.0.1:8848/nacos即可打開Nacos-Console,初始的登錄賬號(hào)和密碼都是nacos

更多運(yùn)維部署相關(guān)的內(nèi)容見文檔運(yùn)維指南中的一節(jié)。

SpirngBoot應(yīng)用使用Nacos作為注冊(cè)中心

SpringBoot應(yīng)用使用Nacos作為注冊(cè)中心需要引入依賴nacos-discovery-spring-boot-starter,筆者編寫本文的時(shí)候(2020-01-01),該依賴的最新版本為0.2.4,對(duì)應(yīng)于SpringBoot的版本為2.0.3.RELEASE,引入如下依賴:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>nacos-discovery-spring-boot-starter</artifactId>
        <version>0.2.4</version>
    </dependency>
</dependencies>

為了方便起見,筆者把控制器、服務(wù)注冊(cè)的代碼都寫在啟動(dòng)類ProvideApplication中:

@RestController
@SpringBootApplication(scanBasePackages = "club.throwable.provide")
public class ProvideApplication implements CommandLineRunner {

    @NacosInjected
    private NamingService namingService;

    @Value("${spring.application.name}")
    private String applicationName;

    @Value("${server.port}")
    private Integer serverPort;

    public static void main(String[] args) {
        SpringApplication.run(ProvideApplication.class, args);
    }

    @GetMapping(path = "/hello")
    public String hello(@RequestParam(name = "name") String name) {
        return String.format("%s say hello!", name);
    }

    @Override
    public void run(String... args) throws Exception {
        // 通過Naming服務(wù)注冊(cè)實(shí)例到注冊(cè)中心
        namingService.registerInstance(applicationName, "127.0.0.1", serverPort);
    }
}

配置文件application-provide.properties內(nèi)容如下:

spring.application.name=provide-service
server.port=9092
nacos.discovery.server-addr=127.0.0.1:8848

使用spring.profiles.active=provide啟動(dòng)ProvideApplication,啟動(dòng)成功后用瀏覽器打開Nacos-Console

暫時(shí)可知服務(wù)的提供方已經(jīng)注冊(cè)成功。接著編寫服務(wù)的消費(fèi)方代碼,引入的最小依賴和服務(wù)提供方完全一致,編寫啟動(dòng)類ConsumeApplication如下:

@SpringBootApplication(scanBasePackages = "club.throwable.consume")
public class ConsumeApplication implements CommandLineRunner {

    @NacosInjected
    private NamingService namingService;

    public static void main(String[] args) {
        SpringApplication.run(ConsumeApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        // 根據(jù)服務(wù)名從注冊(cè)中心獲取一個(gè)健康的服務(wù)實(shí)例
        Instance instance = namingService.selectOneHealthyInstance("provide-service");
        // 這里只是為了方便才新建RestTemplate實(shí)例
        RestTemplate template = new RestTemplate();
        String url = String.format("http://%s:%d/hello?name=throwable", instance.getIp(), instance.getPort());
        String result = template.getForObject(url, String.class);
        System.out.println(String.format("請(qǐng)求URL:%s,響應(yīng)結(jié)果:%s", url, result));
    }
}

消費(fèi)服務(wù)的配置文件application-consume.properties內(nèi)容如下:

spring.application.name=consume-service
server.port=9091
nacos.discovery.server-addr=127.0.0.1:8848

使用spring.profiles.active=consume啟動(dòng)ConsumeApplication,CommandLineRunner執(zhí)行完畢后控制臺(tái)打印:

請(qǐng)求URL:http://127.0.0.1:9092/hello?name=throwable,響應(yīng)結(jié)果:throwable say hello!

這種方式使用起來會(huì)感覺模板代碼比較多,不夠簡潔。如果在SpringCloud體系中,結(jié)合Feign客戶端則可以省略這些模板代碼。

SpirngBoot應(yīng)用使用Nacos管理配置

如果使用Nacos進(jìn)行配置管理,則需要引入nacos-config-spring-boot-starter依賴,筆者編寫本文的時(shí)候(2020-01-01),該依賴的最新版本為0.2.4

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>nacos-config-spring-boot-starter</artifactId>
    <version>0.2.4</version>
</dependency>

新建一個(gè)啟動(dòng)類ConfigApplication如下:

@RestController
@NacosPropertySource(dataId = "example", autoRefreshed = true)
@SpringBootApplication(scanBasePackages = "club.throwable.config")
public class ConfigApplication {

    @NacosValue(value = "${counter:0}", autoRefreshed = true)
    public Long counter;

    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class, args);
    }

    @GetMapping(path = "/get")
    public String get() {
        return String.format("Counter value:%d", counter);
    }
}

筆者定義了一個(gè)長整型的計(jì)數(shù)器,設(shè)置了autoRefreshed(自動(dòng)刷新)為true,新建一個(gè)配置文件application-config.properties

spring.application.name=config-service
server.port=9093
nacos.config.server-addr=127.0.0.1:8848

使用spring.profiles.active=config啟動(dòng)ConfigApplication,啟動(dòng)成功后通過CURL調(diào)用下面的接口:

λ curl -X GET http://127.0.0.1:9093/get
Counter value:0

接著通過Nacos-Console添加一個(gè)配置:

點(diǎn)擊發(fā)布按鈕后再次調(diào)用接口:

λ curl -X GET http://127.0.0.1:9093/get
Counter value:10086

可見計(jì)數(shù)器的值已經(jīng)動(dòng)態(tài)刷新。配置項(xiàng)里面還有很多高級(jí)配置如:指定配置生效的服務(wù)、Beta發(fā)布等等,可以按照合適的場景進(jìn)行設(shè)置。

另外,Nacos Server提供Open API從而可以使用HTTP客戶端就可以輕松進(jìn)行配置查詢、配置更新發(fā)布等操作(目前這些API沒有做鑒權(quán),社區(qū)也有人曾提出這樣會(huì)引發(fā)安全性問題,Nacos官方已經(jīng)立項(xiàng)在后續(xù)新版本中加入鑒權(quán)的功能,目前建議屏蔽或者僅允許內(nèi)網(wǎng)訪問這些Open API):

小結(jié)

本文只是簡單介紹了SpringBoot中使用Nacos作為注冊(cè)中心以及進(jìn)行配置管理。Nacos項(xiàng)目Github倉庫當(dāng)前(2020-01-01)的star數(shù)已經(jīng)接近10000,社區(qū)也十分活躍,Issues和交流群的響應(yīng)都十分迅速。加之Netflix的部分開源產(chǎn)品如Eureka、Hystrix等已經(jīng)停止迭代,但Nacos還在飛速迭代,甚至已經(jīng)在阿里云衍生出商業(yè)版本,所以筆者認(rèn)為Nacos值得使用,在相對(duì)熟悉它的大部分特性之后會(huì)付之于生產(chǎn)環(huán)境中使用。

參考資料:

Nacos文檔

本文的Demo項(xiàng)目:

spring-boot-nacos

下一篇博文會(huì)介紹一下SOFAStack中基于SOFABoot、SOFARpc以及Nacos等組件作為基礎(chǔ)架構(gòu)搭建一套微服務(wù)的詳細(xì)過程。

到此這篇關(guān)于SpringBoot使用Nacos進(jìn)行服務(wù)注冊(cè)發(fā)現(xiàn)與配置管理的文章就介紹到這了,更多相關(guān)SpringBoot服務(wù)注冊(cè)與配置管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Java和PostgreSQL枚舉之間轉(zhuǎn)換的通用方法

    在Java和PostgreSQL枚舉之間轉(zhuǎn)換的通用方法

    枚舉類型(enum)是一種方便的數(shù)據(jù)類型,允許我們指定一個(gè)常量列表,對(duì)象字段或數(shù)據(jù)庫列可以設(shè)置為該列表中的值,在本文中,我將回顧處理Java和PostgreSQL枚舉轉(zhuǎn)換的通用方法,需要的朋友可以參考下
    2023-10-10
  • Spring?Cloud?Eureka高可用配置(踩坑記錄)

    Spring?Cloud?Eureka高可用配置(踩坑記錄)

    在進(jìn)行Eureka高可用配置時(shí),控制臺(tái)一直出現(xiàn)“......”的錯(cuò)誤,但是在瀏覽器中輸入地址:peer1:8761 卻是可正常運(yùn)行,這篇文章主要介紹了Spring?Cloud踩坑之Eureka高可用配置,需要的朋友可以參考下
    2023-08-08
  • 使用Jmeter進(jìn)行http接口測試的實(shí)踐

    使用Jmeter進(jìn)行http接口測試的實(shí)踐

    本文主要針對(duì)http接口進(jìn)行測試,使用Jmeter工具實(shí)現(xiàn)。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • SpringBoot集成cache緩存的實(shí)現(xiàn)

    SpringBoot集成cache緩存的實(shí)現(xiàn)

    日常開發(fā)中,緩存是解決數(shù)據(jù)庫壓力的一種方案,本文記錄springboot中使用cache緩存。需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Java源碼解析LinkedList

    Java源碼解析LinkedList

    今天小編就為大家分享一篇關(guān)于Java源碼解析LinkedList,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java線程池復(fù)用線程的秘密你知道嗎

    Java線程池復(fù)用線程的秘密你知道嗎

    這篇文章主要為大家詳細(xì)介紹了Java線程池復(fù)用線程的秘密,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望您能夠多多關(guān)注

    2022-03-03
  • Java實(shí)例化一個(gè)抽象類對(duì)象的方法教程

    Java實(shí)例化一個(gè)抽象類對(duì)象的方法教程

    大家都知道抽象類無法實(shí)例化,就無法創(chuàng)建對(duì)象。所以下面這篇文章主要給大家介紹了關(guān)于Java實(shí)例化一個(gè)抽象類對(duì)象的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • 基于Properties類操作.properties配置文件方法總結(jié)

    基于Properties類操作.properties配置文件方法總結(jié)

    這篇文章主要介紹了Properties類操作.properties配置文件方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 詳解SpringBoot中@ConditionalOnClass注解的使用

    詳解SpringBoot中@ConditionalOnClass注解的使用

    這篇文章主要和大家詳細(xì)介紹一下springboot中@ConditionalOnClass注解的用法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-08-08
  • Java多線程實(shí)戰(zhàn)之交叉打印的兩種方法

    Java多線程實(shí)戰(zhàn)之交叉打印的兩種方法

    今天小編就為大家分享一篇關(guān)于Java多線程實(shí)戰(zhàn)之交叉打印的兩種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評(píng)論