【Nacos篇】Nacos基本操作及配置

官方文檔:https://nacos.io/zh-cn/docs/v2/ecology/use-nacos-with-spring-cloud.html

前置條件:SpringCloud腳手架

img

單機模式下的Nacos控制檯:img

<dependencies>
        <!-- Registry 註冊中心相關 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!-- Config 配置中心相關 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!--服務間的遠程調用-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

Nacos服務註冊與發現

img

GitHub官方註冊中心實例https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

作爲註冊中心的nacos主要有三種角色:

  1. 服務提供者
  2. 服務消費者
  3. 服務註冊中心

Nacos配置

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

實現使用openFeign的負載均衡:

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

Nacos之前的默認的負載均衡是Ribbon,現版本Nacos 2021已經沒有自帶Ribbon的整合,所以無法通過修改Ribbon負載均衡的模式來實現Nacos提供的負載均衡模式;

啓動類增加註解開關:配置文件在最後

@EnableFeignClients //openfeign  負載均衡及服務調用
@EnableDiscoveryClient  //nacos  註冊中心
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class LotteryRpc {
    public static void main(String[] args) {
        SpringApplication.run(LotteryRpc.class, args);
    }
}

啓動效果:

img

啓動兩個服務:

img

OpenFeign使用

在微服務下,每個模塊的主啓動類都要設置上述的相關的配置。

lottery-activity--------請求-------->lottery-strategy

Lottery-Cloud
└── lottery-activity
    └── lottery-activity-facade
        └── IActivityToStrategyIntegration
└── lottery-strategy
    └── lottery-strategy-controller
        └── StrategyController.java

IActivityToStrategyIntegrationn內容

@Service
@FeignClient(value = "lottery-strategy")
public interface IActivityToStrategyIntegration {
    /**
     * 添加活動策略
     * @param strategyDtos
     */
    @PostMapping("/facade/addStrategy")
    void addStrategy(@RequestBody StrategyDto strategyDtos);
}

strategy服務中正常的接口實現,但是請求的地址、數據類型等需要保持一致。

@PostMapping("/facade/addStrategy")
public void addStrategy(@RequestBody StrategyDto strategyDtos){
    log.info("活動模塊請求策略模塊,請求參數:{}",strategyDtos);
}

Nacos的配置中心

公共配置

在微服務項目中,多個模塊在MySQL、Redis、RocketMQ等有些配置上是相同的,可以將相同的配置抽取出來,通過nacos的擴展進行引入,實現配置共享。

在nacos對應的空間中創建公共yaml。

img

我將mysql、druid、mybatis-plus等配置抽取了。

img

啓動項目,看到一下內容則表示配置完成:

2023-08-06 16:50:37.162  INFO 17508 --- [           main] c.a.c.n.refresh.NacosContextRefresher    : [Nacos Config] Listening config: dataId=lottery-common-dev.yaml, group=DEFAULT_GROUP

單獨配置

在開發過程中不免有需要自定義的參數獲取,在nacos可以通過編寫配置文件來獲取nacos中自定義參數。

我們新建一個yaml文件:lottery-strategy-dev.yaml文件,裏面添加MaxTimes=1參數.

img

在對應的模塊當中新建StrategyConfig

/**
 * @author xbhog
 * @describe:
 * @date 2023/8/5
 */
@Getter
@Configuration
@RefreshScope //自動刷新
public class StrategyConfig {

    @Value("${MaxTimes}")
    private String maxTimes;
}

設置測試請求:

@Autowired
private StrategyConfig strategyConfig;
//--------------------------------------
@GetMapping("/test")
public ResponseResult<String> test(){
    log.info("============獲取的值:{}",strategyConfig.getMaxTimes());
    return ResponseResult.success(null);
}

測試數據:

2023-08-06 17:01:25.328 [http-nio-8001-exec-3] INFO  o.a.c.c.C.[Tomcat].[localhost].[/]: Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-08-06 17:01:25.328 [http-nio-8001-exec-3] INFO  o.s.web.servlet.DispatcherServlet: Initializing Servlet 'dispatcherServlet'
2023-08-06 17:01:25.330 [http-nio-8001-exec-3] INFO  o.s.web.servlet.DispatcherServlet: Completed initialization in 1 ms
2023-08-06 17:01:25.384 [http-nio-8001-exec-3] INFO  c.x.controller.StrategyController: ============獲取的值:1

當修改完參數值,發佈後,Springboot開始監聽到並更新。在請求,數據就變成了2.

img

配置文件:bootstrap.yaml

spring:
  #在nacos中對應的dataID名
  application:
    #應用名稱
    name: lottery-activity
  profiles:
    # 環境配置
    active: @profiles.active@
--- # nacos 配置
spring:
  cloud:
    config:
      override-none: true
      allow-override: true
      override-system-properties: false
    nacos:
      # 註冊地址
      server-addr: @nacos.server@
      discovery:
        # 註冊組
        group: @nacos.discovery.group@
        namespace: ${spring.profiles.active}
      config:
        # 配置組
        group: @nacos.config.group@
        namespace: ${spring.profiles.active}
        file-extension: yaml
        #引入公共配置文件,開啓自動刷新
        shared-configs:
          - data-id: lottery-common-dev.yaml
            refresh: true
        refresh-enabled: true

Nacos的持久化

基於MySQL的持久化,主要修改nacos\conf\application.properties,該版本是MySQL5.6.

數據庫名字、賬號、密碼需要自己設置。

img

重啓nacos,查看數據庫中的nacos配置。

img

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