nacos實現對minio的動態版本切換

橘子味芬达水發表於2024-07-23

問題:怎樣在專案部署後,在不涉及對原始碼的改動情況下,以及如部分場景下業務的更替進行版本切換呢?

這裡我們選擇透過nacos進行相關操作,下面將以nacos控制minio修改服務提供商這一示例進行演示

首先,什麼是nacos?

Nacos 是阿里巴巴開源的一個易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。Nacos 的目標是幫助您發現、配置和管理微服務。它提供了一組簡單易用的特性集,用於構建雲原生應用,其特性包括:

  1. 服務發現與健康監測: Nacos 支援基於 DNS 和基於 RPC 的服務發現,可以檢測服務例項的健康狀況,並在服務不可用時自動剔除。

  2. 動態配置服務: 允許應用程式在不重啟的情況下動態地更新配置。Nacos 會實時推送配置變更到客戶端,減少配置更新時的延遲。

  3. 動態 DNS 服務: 支援基於服務的 DNS 解析,可以將服務名解析為 IP 地址,支援 A 記錄和 SRV 記錄。

  4. 服務及其後設資料管理: Nacos 提供服務及其後設資料的管理功能,包括名稱空間、叢集、分組等概念,使得服務管理更加靈活和精細。

  5. 非侵入式的服務管理: Nacos 的服務管理是無侵入式的,不需要在服務程式碼中新增任何特殊的 SDK 或者框架,只需在啟動時指定 Nacos 的地址即可。

  6. 豐富的監控指標: 提供詳細的監控資料,包括服務呼叫成功率、響應時間、健康檢查狀態等,方便運維人員進行監控和故障排查。

  7. 安全性和許可權控制: 支援基於角色的訪問控制(RBAC),可以對不同使用者設定不同的許可權,保護敏感的配置和資源。

Nacos 的設計目標是高度可擴充套件、高可用、高效能,並且易於使用。它支援多種部署模式,包括單機、叢集以及高可用叢集,可以根據實際需求選擇合適的部署方案。Nacos 已經在阿里巴巴內部大規模使用,並逐漸被社群廣泛採納,適用於各種雲原生場景下的服務管理和配置中心需求。

詳情可見

nacos 的文件:https://nacos.io/zh-cn/docs/what-is-nacos.html

nacos 的架構原理:https://developer.aliyun.com/ebook/36?spm=a2c6h.20345107.ebook-index.18.152c2984fsi5ST

好了,迴歸正題我們採用的是虛擬機器docker拉取映象部署的方式

docker search nacos
docker pull nacos/nacos-server
# 映象拉完之後,啟動指令碼
docker run -d \
  --name nacos \
  --privileged  \
  --cgroupns host \
  --env JVM_XMX=256m \
 --env MODE=standalone \
  --env JVM_XMS=256m \
  -p 8848:8848/tcp \
  -p 9848:9848/tcp \
  --restart=always \
  -w /home/nacos \
  nacos/nacos-server

  http://***:8848/nacos進入後臺管理

輸入對應內容後儲存

nacos:
  config:
    secret-key: nacos
    access-key: nacos
    data-id: jc-club-oss
    group: DEFAULT_GROUP
    type: yaml
    server-addr: your-ip:8848
    auto-refresh: true
    remote-first: true
    bootstrap:
      enable: true

  

 @NacosValue(value = "${storage.service.type}",autoRefreshed = true)
    private String storageType;
    @RequestMapping("/testGetA


 @RequestMapping("/testNacos")
    public String testNacos() throws Exception {
        List<String> allBucket = fileService.getAllBucket();
        return storageType;
    }

  這樣,只需要修改我們nacos的配置,即可做到不修改原始碼情況下對服務提供商的具體修改。

pom檔案

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.4.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.4.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-logging</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.34</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.2.11</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>2.4.2</version>
        </dependency>
    </dependencies>

  

相關文章