Nacos

阿里巴巴在2018年7月份發(fā)布Nacos, Nacos是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。Nacos 支持幾乎所有主流類型的服務(wù)的發(fā)現(xiàn)、配置和管理:

  • Kubernetes Service
  • gRPC & Dubbo RPC Service
  • Spring Cloud RESTful Service

Nacos有哪些功能?

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

Nacos 支持基于 DNS 和基于 RPC 的服務(wù)發(fā)現(xiàn)。服務(wù)提供者使用 原生SDKOpenAPI、或一個(gè)獨(dú)立的Agent TODO注冊(cè) Service 后,服務(wù)消費(fèi)者可以使用DNS TODOHTTP&API TODO查找和發(fā)現(xiàn)服務(wù)。

Nacos 提供實(shí)時(shí)健康檢查,阻止服務(wù)向不健康的主機(jī)或服務(wù)實(shí)例發(fā)送請(qǐng)求。Nacos 支持傳輸層(PING 或 TCP)和應(yīng)用層(如 HTTP、Redis、MySQL、用戶自定義)的健康檢查。 對(duì)于復(fù)雜的云環(huán)境和網(wǎng)絡(luò)拓?fù)洵h(huán)境中(如 VPC、邊緣服務(wù)等)服務(wù)的健康檢查,Nacos 提供了 agent 模式和服務(wù)端2種健康檢查模式。Nacos 還提供統(tǒng)一的健康檢查儀表盤,幫助您管理服務(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ù)的需要,讓配置變得更加高效和敏捷。

配置中心化管理讓無(wú)狀態(tài)服務(wù)實(shí)現(xiàn)變得更簡(jiǎn)單,讓服務(wù)按需彈性擴(kuò)展變得更容易。

Nacos 提供了一個(gè) 簡(jiǎn)單易用的UI TODO 幫助您管理所有的服務(wù)和應(yīng)用的配置。Nacos 還提供包括配置版本跟蹤、金絲雀發(fā)布、回滾配置以及客戶進(jìn)程配置更新?tīng)顟B(tài)跟蹤在內(nèi)的一系列開(kā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安裝

前往 https://github.com/alibaba/nacos/releases 下載

unzip nacos-server-1.0.0.zip
或者
tar -xvf nacos-server-1.0.0.tar.gz

啟動(dòng)

#Linux/Unix/Mac 下
sh startup.sh -m standalone
#Windows 下
cmd startup.cmd

測(cè)試,打開(kāi) http://localhost:8848/nacos/#/login ,默認(rèn)賬號(hào)密碼都是nacos

Nacos 實(shí)現(xiàn)配置管理

1. 創(chuàng)建命名空間
創(chuàng)建命名空間
2. 新建配置項(xiàng)
新建配置項(xiàng)
3. 代碼訪問(wèn)配置項(xiàng)

POM.xml

<?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>com.suoron</groupId>
    <artifactId>SpringbootNacos</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <!-- 繼承父包 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
    </parent>

    <properties>
        <spring-cloud.version>Finchley.SR2</spring-cloud.version>
        <spring-cloud-alibaba.version>0.2.0.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- nacos配置訪問(wèn)依賴 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <!-- 導(dǎo)入Spring cloud相應(yīng)配置項(xiàng)  -->
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <!--maven的插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.0</version>
                <configuration>
                    <!--  鏡像名, 也可以使用${project.artifactId} -->
                    <repository>testspringboot</repository>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>

        </plugins>

        <!-- 配置java版本 不配置的話默認(rèn)父類配置的是1.6-->
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>

bootstrap.properties

#對(duì)應(yīng)配置管理項(xiàng)Data,Id
spring.application.name=SpringBootNacos
#namespace填寫DEV對(duì)應(yīng)的ID
spring.cloud.nacos.config.namespace=cc654f1e-cce5-4b38-935d-3e95bbb712a7
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

application.yml

server:
  port: 8080
  tomcat:
    uri-encoding: utf-8

MyApplication.java

package com.suoron.springboot.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = "com.suoron.springboot")
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}

TestController.java

package com.suoron.springboot.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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/config")
@RefreshScope   //配置熱更新
public class TestController {

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @Value("${test:aa}")
    private String test;

    @RequestMapping("/get")
    public boolean get() {
        System.out.println(test);
        return useLocalCache;

    }
}

訪問(wèn)測(cè)試: http://localhost:8080/config/get

附A: 注解的方式實(shí)現(xiàn)配置訪問(wèn)

@SpringBootApplication
@NacosPropertySource(dataId = "springcloud-nacos-hello", autoRefreshed = true)
@RestController
public class SpringcloudNacosHelloApplication {
 
  public static void main(String[] args) {
    SpringApplication.run( SpringcloudNacosHelloApplication.class, args );
  }
 
  @NacosValue(value = "${test.properties.useLocalCache:false}", autoRefreshed = true)
  private boolean useLocalCache;
 
 
  @GetMapping("/get")
  public boolean get(){
    return useLocalCache;
  }
 
}

說(shuō)明:
在啟動(dòng)類,加入 @NacosPropertySource 注解其中包含兩個(gè)屬性,如下:

  • dataId:這個(gè)屬性是需要在Nacos中配置的Data Id。
  • autoRefreshed:為true的話開(kāi)啟自動(dòng)更新。

@NacosValue:在使用Nacos做配置中心后,需要使用@NacosValue注解獲取配置,使用方式與@Value一樣,完整啟動(dòng)類代碼如下所示。

附B: Nacos配置數(shù)據(jù)持久化

在添加了自定義配置后,我們打開(kāi)NACOS_PATH/data,會(huì)發(fā)現(xiàn)里邊有個(gè)derby-data目錄,Derby 是 Java 編寫的數(shù)據(jù)庫(kù),屬于 Apache 的一個(gè)開(kāi)源項(xiàng)目。我們的配置數(shù)據(jù)現(xiàn)在就存儲(chǔ)在這個(gè)庫(kù)中。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容