Spring Cloud Alibaba nacos

2023-08-23 12:01:21

Spring Cloud Alibaba nacos

目錄

安裝(docker-compose方式)

https://github.com/nacos-group/nacos-docker/tree/master/example

使用

依賴

<!--SpringBoot版本-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.10.RELEASE</version
</parent>

<!--nacos-discovery-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  <version>2.2.5.RELEASE</version>
</dependency>
<!--nacos-config-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  <version>2.2.5.RELEASE</version>
</dependency>

 <dependencyManagement>
     <dependencies>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-dependencies</artifactId>
              <version>Hoxton.SR3</version>
             <type>pom</type>
             <scope>import</scope>
         </dependency>
     </dependencies>
 </dependencyManagement>

yml

spring:
  application:
    name: hailtaxi-driver
  profiles:
    active: dev
  cloud:
    #======================================================================== nacos設定         ========================#
    nacos:
      discovery:
        server-addr: 59.110.6.119:8848                            # nacos支援設定中心與註冊中心隔離
        namespace: 2a32361d-df48-40a9-946e-b83393363fa9
        group: template
        weight: 1                                                 # 不同範例間的權重
      config:
        server-addr: 59.110.6.119:8848
        namespace: 2a32361d-df48-40a9-946e-b83393363fa9
        group: template
        file-extension: yaml                                      # 組態檔擴充套件名  預設會載入 ${spring.application.name}-${spring.profiles.active}.${file-extension}
        shared-configs:                                           # 共用設定
          - dataId: datasource.yaml
            refresh: true                                         # 是否支援動態重新整理
            group: template
        extension-configs:                                        # 擴充套件設定
          - dataId: customer.yaml
            refresh: true                                         # 是否支援動態重新整理
            group: template

設定重新整理

Environment自動重新整理

更改在啟動類,定時重新整理設定資訊

@SpringBootApplication
@EnableDiscoveryClient
@MapperScan(basePackages = "xx.template.driver.mapper")
class DemoApplication {
    public static void main(String[] args) {
        ApplicationContext applicationContext = SpringApplication.run(DemoApplication.class, args);
        while (true) {
            //監聽指定設定
            //當動態設定重新整理時,會更新到 Environment 中,
             String name = applicationContext.getEnvironment().getProperty("app.name"); 
            String version = applicationContext.getEnvironment().getProperty("app.version");
            System.out.println("app.name=" + name + ";app.version=" + version);
            try {
                // 每隔5秒中從 Environment 中獲取一下
                TimeUnit.SECONDS.sleep(5); 
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

@Value重新整理

程式中如果寫了 @Value 註解,可以採用在指定類上新增 @RefreshScope 實現重新整理,只需要在指定類上新增該註解即可

@RefreshScope
@RequestMapping(value = "/demo")
class DemoController {
    
    @Value("${app.version}")
    private String version;
    
    @Value("${app.name}")
    private String appName;

    @GetMapping("/appInfo")
    public String getAppInfo() {
        return appName + ":" + version;
    }
}

灰度釋出

叢集部署

Nacos叢集模式包括 直連模式、VIP模式、域名模式,其中直連模式因為節點故障無法自動識別、效率低下不做介紹,官方也不推薦這種模式。

VIP模式

http://VIP:port/openAPI 掛載VIP模式,直連vip即可,下面掛server真實ip,可讀性不好。

域名模式

http://nacos.com:port/openAPI 域名 + VIP模式,可讀性好,而且換ip方便,因此官方推薦該模式

部署方式

  1. 服務下載

    通過https://github.com/alibaba/nacos/releases/下載需要的服務,並上傳到伺服器解壓縮。

  2. 設定資料庫

    修改 conf/application.properties 設定資料庫

    修改spring.datasource.platform為對應的資料庫型別;Connect URL of DB為對應的資料庫連線資訊。

    多節點應使用相同資料庫。

  3. 叢集設定

    修改 conf/cluster.conf 設定叢集

    將所有節點的ip、埠資訊設定到cluster.conf 保證所有節點互通。

  4. 啟動節點

    進入到每個節點 nacos/bin 目錄下,執行sh startup.sh

    完成後,存取任何一個單節點,可以在節點列表中檢視叢集狀態,專案使用時,進行如下設定即可

nginx 代理

使用者端接入,不建議寫多個節點的IP:Port,建議以域名的方式連線Nacos,因此需要設定Nacos域名。

#負載均衡池設定
upstream nacos-cluster{
  server 192.168.211.145:8848; # 修改為conf/cluster.conf中設定的叢集資訊
  server 192.168.211.146:8848;
  server 192.168.211.147:8848;
}
server {
  listen    80;
  server_name nacos.cluster.com;
 
  location / {
    proxy_pass http://nacos-cluster;
  }
}

完成代理設定後,專案使用時只需要修改 server-addr為192.168.211.145(nginx所在伺服器ip):80 即可