1. 程式人生 > 其它 >Spring Cloud alibaba Nacos

Spring Cloud alibaba Nacos

Spring Cloud alibaba Nacos

1.Spring Cloud alibaba

地址:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/README-zh.md

引入依賴:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.7.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.Spring Cloud alibaba Nacos 註冊中心

地址:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/readme-zh.md

(1)下載Nacos Server

地址:https://github.com/alibaba/nacos/releases

(2)解壓執行

預設是cluster,可以改成standalone,或者如下命令列執行,

單機執行

startup.cmd -m standalone

(3)訪問:http://127.0.0.1:8848/nacos/index.html#/login

使用者名稱密碼都是nacos

(4)gulimall-common的pom.xml匯入依賴:

 <dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 </dependency>
 
 /*
 //如果出現loadbalancer相關錯誤,在nacos"包中移除ribbion依賴,並加入loadbalancer依賴"
         <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <!--不使用Ribbon 進行客戶端負載均衡-->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
 */

(5)gulimall-member的application.yml增加nacos配置

cloud:
  nacos:
    discovery:
      server-addr: 127.0.0.1:8848
application:
  name: gulimall-member

(6)gulimall-member使用 @EnableDiscoveryClient 註解開啟服務註冊與發現功能

@EnableDiscoveryClient

(7)gulimall-coupon的application.yml增加nacos配置

cloud:
  nacos:
    discovery:
      server-addr: 127.0.0.1:8848
application:
  name: gulimall-coupon

(8)gulimall-coupon使用 @EnableDiscoveryClient 註解開啟服務註冊與發現功能

@EnableDiscoveryClient

(9)執行GulimallCouponApplication 和GulimallMemberApplication

(10)登入nacos檢視,服務已經註冊進來

3.Spring Cloud alibaba Naloas 配置中心

地址:https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md

(1)匯入依賴

<!--nacos配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>


(2)增加bootstrap.properties配置,這個檔案是springboot裡規定的,他優先級別application.properties高

# 改名字,對應nacos裡的配置檔名
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

(3)增加application.properties配置

coupon.user.name = application.properties
coupon.user.age = 18

(4)CouponController增加測試程式碼

//從application.properties中獲取//不要寫user.name,他是環境裡的變數
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private Integer age;
@RequestMapping("/test")
public R test(){

    return R.ok().put("name",name).put("age",age);
}

(5)測試:http://localhost:7005/coupon/coupon/test

這裡就可以訪問本地application.properties的配置檔案

(6)nacos增加配置併發布

4.Spring Cloud alibaba Nacos 配置中心-名稱空間與配置分組

4.1 名稱空間

nacos新增名稱空間

prop配置

coupon.user.name = nacos.prop
coupon.user.age = 30
# 可以選擇對應的名稱空間 # 寫上對應環境的名稱空間ID
spring.cloud.nacos.config.namespace=d408db52-7aa9-4348-81b4-cc5d39f91c55

測試訪問:http://localhost:7005/coupon/coupon/test

  • 名稱空間:用作配置隔離。(一般每個微服務一個名稱空間)

    • 預設public。預設新增的配置都在public空間下

    • 開發、測試、開發可以用名稱空間分割。properties每個空間有一份。也可以為每個微服務配置一個名稱空間,微服務互相隔離

    • 在bootstrap.properties裡配置

      spring.cloud.nacos.config.namespace=d408db52-7aa9-4348-81b4-cc5d39f91c55
      
  • 配置集:一組相關或不相關配置項的集合。

  • 配置集ID:類似於配置檔名,即Data ID

  • 配置分組:預設所有的配置集都屬於DEFAULT_GROUP。雙十一,618的優惠策略改分組即可

    spring.cloud.nacos.config.group=DEFAULT_GROUP
    

4.2 配置分組

(1)為coupon新增一個名稱空間

(2)gulimall-coupon只讀取自己的配置(基於微服務隔離)

(3)可以設定不同的分組

coupon.user.name = coupon.11

coupon.user.age = 60

(4)測試:http://localhost:7005/coupon/coupon/test

(5)新增dev(開發環境)和prod(生產環境)分組,預設為dev分組

dev配置:

coupon.user.name = coupon.dev
coupon.user.age = 50

prod配置:

coupon.user.name = coupon.prod
coupon.user.age = 70

測試訪問:http://localhost:7005/coupon/coupon/test

5.Spring Cloud alibaba Nacos 配置中心-載入多配製集

(1)註釋application.yml

(2)nacos新增配置

datasource.yml

spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.56.10:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
  profiles:
    active: dev

mybatis.yml

mybatis-plus:
  mapper-locations: classpath:/mapper/**/*.xml
  global-config:
    db-config:
      id-type: auto
      logic-delete-value: 1
      logic-not-delete-value: 0

other.yml

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
  application:
    name: gulimall-coupon

server:
  port: 7005

(3)修改bootstrap.properties

# 改名字,對應nacos裡的配置檔名

spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

# 可以選擇對應的名稱空間 # 寫上對應環境的名稱空間ID
spring.cloud.nacos.config.namespace=8531791b-f632-4588-a406-090f42c04d48

# 分組 預設DEFAULT_GROUP
spring.cloud.nacos.config.group=dev

spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true

spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true

spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true

(4)測試執行,nacos配置讀取正常

訪問:http://localhost:7005/coupon/coupon/test

訪問:http://localhost:7005/coupon/coupon/list

6.注意:com.alibaba.cloud版本和nacos版本問題

com.alibaba.cloud是2.2.7.RELEASE版本,nacos如果是1.多版本就會註冊不進去,服務起不來

7.出現loadbalancer相關的錯誤

在nacos"包中移除ribbion依賴,並加入loadbalancer依賴"

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <!--不使用Ribbon 進行客戶端負載均衡-->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </exclusion>
    </exclusions>
</dependency>

在需要遠端呼叫的服務加上loadbalancer

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

8.不識別bootstrap.properties的錯誤

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>