1. 程式人生 > 實用技巧 >Spring cloud Alibaba Nacos服務註冊發現和配置中心

Spring cloud Alibaba Nacos服務註冊發現和配置中心

Nacos(官方網站:http//nacos.io)是一個易於使用的平臺,旨在用於動態服務發現,配置和服務管理。它可以幫助您輕鬆構建雲本機應用程式和微服務平臺。

Nacos = Eureka + config + Bus

  • 服務發現和服務執行狀況檢查

    Nacos使服務易於註冊自己並通過DNS或HTTP介面發現其他服務。Nacos還提供服務的實時執行狀況檢查,以防止向不正常的主機或服務例項傳送請求。

  • 動態配置管理

    動態配置服務使您可以在所有環境中以集中和動態的方式管理所有服務的配置。Nacos消除了在更新配置時重新部署應用程式和服務的需求,這使配置更改更加有效和敏捷。

  • 動態DNS服務

    Nacos支援加權路由,使您可以更輕鬆地在資料中心內的生產環境中實施中間層負載平衡,靈活的路由策略,流控制和簡單的DNS解析服務。它可以幫助您輕鬆實現基於DNS的服務發現,並防止應用程式耦合到特定於供應商的服務發現API。

  • 服務和元資料管理

    Nacos提供了易於使用的服務儀表板,可幫助您管理服務元資料,配置,kubernetes DNS,服務執行狀況和指標統計資訊。

Nacos 作為服務註冊與發現:

1.下載nacos

2.開啟bin目錄下的startup.cmd

3.訪問http://localhost:8848/nacos/

服務端:

<dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</
groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- SpringBoot整合Web元件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</
artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--日常通用jar包配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
server:
  port: 9001


spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848


management:
  endpoints:
    web:
      exposure:
        include: '*'
@SpringBootApplication
@Slf4j
@EnableDiscoveryClient
public class PaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run( PaymentMain9001.class,args);
        log.info("****************PaymentMain9001 啟動 ************ ");
    }
}
@RestController
@Slf4j
public class PaymentController {
    @Value("${server.port}")
    private String serverPort;

    @GetMapping(value = "/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id) {
        return "nacos registry, serverPort: " + serverPort + "\t id" + id;
    }
}

客戶端:

server:
  port: 83


spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

#消費者將要去訪問的微服務的名稱(註冊成功進入nacos的微服務提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider

Nacos 作為服務配置中心:

YML 需要2個 application.yml bootstarp.xml

Nacos同 spring cloud config 一樣的在專案初始化 要保證先從配置中心進行配置拉取。 在拉去配置之後才能保證專案的正常啟動。

Spring boot中 配置檔案的載入順序 bootstrap 優先順序高於 application.yml

實際開發中。 通常一個系統會準備

dev開發環境

test測試環境

prod生產環境

Nacos如何保證我們指定環境啟動服務正確的讀取相應的環境呢?

nacos 給我提供 了 dataid group namespace

nacos config服務端:

<dependencies>
        <!--nacos-config-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--nacos-discovery-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--web + actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--一般基礎配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

application.yml

spring:
  profiles:
    active: dev
bootstarp.xml

server: port: 3377 spring: application: name: nacos-config-client cloud: nacos: discovery: server-addr: localhost:8848 config: server-addr: localhost:8848 # nacos作為配置中心的地址 file-extension: yaml # 指定yaml格式的配置 group: DEV_GROUP namespace: 122de11e-bb29-40e7-bc8e-06436b105ed1 # 配置規則 # ${spring.appliction.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension} # nacos-config-client-dev.yaml
@EnableDiscoveryClient
@SpringBootApplication
@Slf4j
public class ConfigNacosMain3377 {
    public static void main(String[] args) {
        SpringApplication.run( ConfigNacosMain3377.class,args);
        log.info("****************ConfigNacosMain3377 啟動 ************ ");
    }
}
@RefreshScope
@RestController
@Slf4j
public class ConfigController {
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

在nacos上更改後可實現動態重新整理

namespace: