SpringCloud Alibaba_Nacos服務註冊和配置中心

簡介

Nacos是Naming、Configuration和Service的組合,即Dynamic Naming and Configuration Service,通俗來說,就是註冊中心和配置中心的組合(等價於Eureka+Config+Bus)
在這裏插入圖片描述

下載安裝運行

  1. 下載
    https://github.com/alibaba/nacos/releases
  2. 運行
    解壓安裝包,直接運行bin目錄下的startup.cmd
    在這裏插入圖片描述
  3. 訪問控制檯
    命令運行成功後直接訪問http://localhost:8848/nacos,用戶名密碼都是nacos
    在這裏插入圖片描述

服務註冊中心

服務提供者

  1. pom
<!--SpringCloud ailibaba nacos -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. yaml
server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

management:
  endpoints:
    web:
      exposure:
        include: '*'
  1. 主啓動類
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001
{
    public static void main(String[] args) {
            SpringApplication.run(PaymentMain9001.class, args);
    }
}

服務消費者

  1. pom
<!--SpringCloud ailibaba nacos -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. yaml
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
  1. 主啓動類
@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83
{
    public static void main(String[] args)
    {
        SpringApplication.run(OrderNacosMain83.class,args);
    }
}

註冊中心對比

在這裏插入圖片描述

Nacos AP與CP模式切換

AP代表高可用,CP代表數據一致,如何選擇?

一般來說,如果不需要存儲服務級別的信息且服務實例是通過Nacos-client註冊,並且能夠保持心跳,那麼就可以選擇AP模式。當前主流的服務如SpringCloud和Dubbo,都適用AP模式,AP模式爲了服務的可能性而減弱了一致性,因此AP模式下只支持註冊臨時實例。

如果需要在服務級別編輯或者存儲配置信息,那麼CP模式是必須的,K8S和DNS服務則適用CP模式。CP模式下支持註冊持久化實例,此時則是以Raft協議爲集羣運行模式,該模式下注冊實例必須先註冊服務,如果服務不存在,則會返回錯誤。

curl -X PUT '$NACOS_SERVER:8848/ncaos/v1/ns/operator/switches?entry=serverMode&value=CP'

服務配置中心

基礎配置

1.pom

<!--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>
  1. bootstrap.yaml
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服務註冊中心地址
      config:
        server-addr: localhost:8848 #Nacos作爲配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: DEV_GROUP
        namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4
  1. application.yaml
spring:
  profiles:
    active: dev # 表示開發環境
    #active: test # 表示測試環境
  1. 主啓動類
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}
  1. controller
@RestController
@RefreshScope //支持Nacos的動態刷新功能。
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}
  1. Nacos添加配置信息
    在這裏插入圖片描述
    設置Data id
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

在這裏插入圖片描述
Nacos會記錄配置文件的歷史版本默認保留30天,此外還有一鍵回滾功能。

分類配置

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

NameSpace、Group、Data id三者的關係

在這裏插入圖片描述
類似於Java中的package和類名。
最外層的namespace是可以用於區分部署環境的,group和data id邏輯上區分兩個目標對象
默認:

  • namespace=public
  • group=DEFAULT_GROUP
  • Cluster=DEFAULT

namespace主要是用來實現隔離。比如有3個環境:開發、測試、生產,則可以創建三個namespace。

group可以把不同微服務劃分到同一個分組。

Service是微服務:一個Service可以包含多個Cluster,Cluster是對指定微服務的一個虛擬劃分。
比方說爲了容災,將Service分別部署在杭州機房和廣州機房,這時就可以給杭州機房的Service建一個Cluster(HZ),廣州機房的Service建一個Cluster(GZ),可以儘量讓同一個機房的微服務互相調用,以提升性能。

Instance就是微服務實例。

三種分類加載方案配置

Data id方案

指定spring.profile.active和配置文件的DataID來使不同環境下讀取不同的配置。

默認空間+默認分組+新建dev和test兩個DataID
在這裏插入圖片描述
在這裏插入圖片描述
通過spring.profile.acvice屬性就能進行多環境下配置文件的讀取。
在這裏插入圖片描述

Group 方案

通過Group實現環境區分
在這裏插入圖片描述
在這裏插入圖片描述
在bootstrap.yaml中config下增加一條group的配置即可。可配置爲DEV_GROUP或TEST_GROUP
在這裏插入圖片描述

Namespace方案

在這裏插入圖片描述
在這裏插入圖片描述
yaml:

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服務註冊中心地址
      config:
        server-addr: localhost:8848 #Nacos作爲配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: DEV_GROUP
        namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4

Nacos集羣和持久化配置

在這裏插入圖片描述
在這裏插入圖片描述
默認Nacos使用嵌入式數據庫實現數據的存儲。所以,如果多個默認配置的Nacos節點,數據存儲是存在一致性問題的,爲了解決這個問題,Nacos採用集中式存儲的方式來支持集羣化部署,目前只支持MySQL的存儲。

持久化配置

Nacos默認自帶的是嵌入式數據庫derby。
切換MySQL,執行安裝目錄/conf下nacos-mysql.sql
修改application.properties

#*************** Config Module Related Configurations ***************#
### If user MySQL as datasource:
 spring.datasource.platform=mysql

### Count of DB:
 db.num=1

### Connect URL of DB:
 db.url.0=jdbc:mysql://1.1.1.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
 db.user=user
 db.password=password

Linux生產環境配置

MySQL配置

執行SQL腳本nacos-mysql.sql

application.properties配置

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

集羣配置cluster.conf

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

編輯Nacos的啓動腳本startup.sh,使能夠接受不同的啓動端口

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

Nginx 配置

在這裏插入圖片描述

yaml

在這裏插入圖片描述

參考Demo

https://github.com/zzyybs/atguigu_spirngcloud2020

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章