SpringCloudAlibaba - 基於Nacos構建分佈式配置中心

分佈式配置中心可以實現不需要重啓我們的服務器,動態的修改我們的配置文件內容,常見的配置中心有攜程的阿波羅、SpringCloud Config、Nacos輕量級的配置中心等。

Nacos支持三種部署模式,分別爲:

  • 單機模式 - 用於測試和單機試用。
  • 集羣模式 - 用於生產環境,確保高可用。
  • 多集羣模式 - 用於多數據中心場景

官方文檔網址:https://nacos.io/zh-cn/docs/deployment.html,多集羣一般涉及到多機房問題,一般我們用不到,即使用到了也是bat等級別的一線互聯網公司,所以我們只講解單機模式和集羣模式。

【Nacos單體模式】

①. 發佈:進入http://localhost:8848/nacos,配置管理 - 配置列表 - 點擊右上角的加號 - 填寫參數,點擊發布即可

②. 客戶端service-impl-order讀取配置:

  service-impl引入實現類公共依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>0.2.2.RELEASE</version>
</dependency>

  新建bootstrap.yml配置:

# 【application.yml】
server:
  port: 8090
# 【bootstrap.yml】
spring:
  application:
    # 服務名稱
    name: service-order
  cloud:
    nacos:
      discovery:
        # nacos註冊地址
        server-addr: 127.0.0.1:8848
      config:
        # 配置中心連接地址
        server-addr: 127.0.0.1:8848
        # 分組
        group: DEFAULT_GROUP
        # 類型
        file-extension: properties

  編寫測試接口:

@RestController
public class OrderService {

    @Value("${xyy.age}")
    private String age;

    @GetMapping("/getAge")
    public String getAge(){
        return age;
    }
}

可以發現,我們的SpringBoot項目並沒有配置xyy.age,而是直接去Nacos讀取了配置。

③. 實時刷新

需要在用到@Value("${}")註解的類上添加註解@RefreshScope,那麼是不是以後每個controller都需要加該註解?

答案是不用的,只需要把需要用到的該註解的屬性封裝到一個公共類中,在這個類上加入該註解即可,其它需要調用的地方直接調公共類即可。

重啓訂單服務,getAge接口返回結果爲22,此時在Nacos門戶把xyy.age改爲23,則不重啓服務,再次訪問getAge接口,會發現返回結果爲23。

④ 版本控制

與SpringBoot一樣,直接在配置文件末尾加入dev/prd即可;新建兩個配置文件分別爲service-order-dev.properties,service-order-prd.properties,xyy.age分別爲20,30,此時分別在bootstrap指定dev,prd,會發現返回結果是有區別的。

    

⑤ yml,properties區分

新建service-order-prd.yaml,在bootstrap.yml指定file-extension爲yaml,重啓服務,返回結果變爲18。

          

【Nacos集羣模式】

1. 新建數據庫nacos_config,導入nacos/conf下的nacos-mysql.sql,(數據庫版本有要求)。

  在application.proerties加入下面配置

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

  修改cluster.conf.example爲cluster.conf並修改配置爲:

拷貝3個上述配置,並修改application.properties的server.port分別爲8848,8849,8850。

2. Nginx實現Nacos負載均衡

  host配置文件:

  Nginx配置文件:

啓動Nginx,訪問http://nacos.xyy.com/nacos即可訪問到Nacos的Portal網站。

SpringCloudAlibaba集羣方式連接,修改bootstrap.yml文件如下:

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