SpringCloud Nacos服務註冊和配置中心

SpringCloud Nacos服務註冊和配置中心

圖片在這裏插入圖片描述html

簡介

1. 爲何叫Nacos :

前四個字母分別是Naming 和 Configuration 的前兩個字母,最後的s爲Service。git

Nacos 就是註冊中心 +  配置中心的組合github

Nacos 官網  :https://nacos.io/zh-cn/web

GitHub:https://github.com/alibaba/Nacospring


  • Nacos 支持基於 DNS 和基於 RPC 的服務發現。服務提供者使用 原生SDK、OpenAPI、或一個獨立的Agent TODO註冊 Service 後,服務消費者可使用DNS TODO 或HTTP&API查找和發現服務。docker

  • Nacos 提供對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求。Nacos 支持傳輸層 (PING 或 TCP)和應用層 (如 HTTP、MySQL、用戶自定義)的健康檢查。對於複雜的雲環境和網絡拓撲環境中(如 VPC、邊緣網絡等)服務的健康檢查,Nacos 提供了 agent 上報模式和服務端主動檢測2種健康檢查模式。Nacos 還提供了統一的健康檢查儀表盤,幫助您根據健康狀態管理服務的可用性及流量。圖片bootstrap

安裝並運行nacos

在docker上安裝nacosapi

拉取nacos鏡像:瀏覽器

docker pull nacos/nacos-server

運行nacos:服務器

docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server

在瀏覽器輸入:http://ip地址:8848/nacos/ 帳號和密碼都是nacos。

圖片圖片

Nacos做爲服務註冊中心演示

官方文檔:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html

提供者
  1. 新建模塊cloudalibaba-provider-payment9001
  2. pom
<dependencies>
    <!--SpringCloud Alibaba nacos-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <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>
  1. yml
server:
  port: 9001


spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 120.92.164.250:8848  #配置的Nacos地址(本機的寫localhost:8848,服務器的寫IP地址)


management:
  endpoints:
    web:
      exposure:
        include: '*'
  1. 主啓動類
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {

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

}

  1. 新建controller包,包下新建PaymentController
@RestController
public class PaymentController {

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


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

}

  1. 啓動9001

圖片在這裏插入圖片描述

消費者 (整合Feign)
  1. 新建  cloudalibaba-consumer-nacos-order83
  2. pom
<dependencies>
        <!--SpringCloud Alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- 引用本身定義的api通用包,可使用Payment支付Entity -->
        <dependency>
            <groupId>com.angenin.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <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>
        <!-- openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>
  1. 建yml
server:
  port: 83


spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 120.92.164.250:8848  #配置的Nacos地址(本機的寫localhost:8848,服務器的寫IP地址)


#消費者要訪問的微服務名稱(成功註冊進nacos的服務提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider
  1. 主啓動類
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class OrderNacosMain83 {

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

}
  1. 新建 feign包 ,包下新增接口  PaymentFeignService
@Component
@FeignClient(value = "nacos-payment-provider")
public interface PaymentFeignService {

    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id);

}

  1. 新建controller
@RestController
public class OrderNacosController {

    @Resource
    private PaymentFeignService paymentFeignService;

    @GetMapping("/consumer/payment/feign/nacos/{id}")
    public String paymentInfo2(@PathVariable("id") Integer id){
        return paymentFeignService.getPayment(id);
    }

}
  1. 啓動圖片

服務註冊中心對比

Nacos全景圖圖片Nacos和CAP(同時支持 cp + ap)圖片圖片

AP 和 CP的切換

A :  可用性 B:一致性 C:分區容錯性

  • C是全部節點在統一時間看到的數據是一致的;而A的定義是全部的請求都會收到響應

如何選擇模式:

  • 通常來講,若是不須要存儲服務級別的信息且服務實例都是經過 nacos-client 註冊,而且可以保持心跳上報,那麼就能夠選擇AP 模式,當前主流的服務如 SpringCloud 和  Dubbo 服務,都適用與AP模式,AP模式爲了服務的可能性而減弱了一致性,所以AP模式下支持註冊臨時節點
  • 若是須要在服務界別編輯 或者存儲配置信息,那麼CP是必須,K8S服務和DNS服務則適用於CP模式,CP模式下則支持持久化實例,此時則是以Raft 協議爲集羣模式,該模式下注冊實例以前必須先註冊服務,若是服務不存在,則會返回錯誤

Nacos默認AP。

切換CP圖片


Nacos做爲服務配置中心演示

  1. 新建cloudalibaba-config-nacos-client3377
  2. pom
<dependencies>
    <!-- nacos config-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <!-- openfeign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    <!--SpringCloud Alibaba nacos-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <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>
  1. yml

圖片

bootstrap.yml:

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 120.92.164.250:8848 #Nacos服務註冊中心地址(本機的寫localhost)
      config:
        server-addr: 120.92.164.250:8848 #Nacos做爲配置中心地址(本機的寫localhost)
        file-extension: yml #指定yml格式配置

application.yml

spring:
  profiles:
    active: dev #表示開發環境

  1. 啓動類
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {

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

}

  1. 新建controller 包,ConfigClientController類
@RefreshScope   //支持Nacos的動態刷新功能
@RestController
public class ConfigClientController {

    @Value("${config.info}")
    private String configInfo;


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

}

  1. 在Nacos中添加配置信息

官網:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

圖片`

圖片圖片圖片7. 啓動3377 瀏覽器輸入:http://localhost:3377/config/info

圖片實時刷新

圖片在這裏插入圖片描述

Nacos做爲配置中心——分類配置

實際開發中,一般一個系統會準備

  • dev開發環境
  • test測試環境
  • prod生產環境

圖片在這裏插入圖片描述

Namespace+Group+DataID三者的關係
  1. 介紹

相似Java裏面的package名和類名 最外層的nameSpace是能夠用於區分部署環境的,Group和DataID邏輯是那個區分兩個目標對象

圖片在這裏插入圖片描述


Data ID 區分

圖片在這裏插入圖片描述

Group 區分

圖片圖片Namespace方案

圖片圖片圖片

相關文章
相關標籤/搜索