springcloud alibaba 之 nacos

想從 springcloud中切換到 springcloud alibaba本文可以起到指引作用

頭號大事是服務註冊發現,在選型上我優先考慮了 consul弄完之後發現沒有傳說中的那麼香,於是乎換成了 nacos

項目源碼

下面是集成 nacos的過程

在開始之前首先需要看一下 nacos入門

一、搭建 nacos服務

  • 運行以下命令使用 docker來虛擬化服務
git clone https://github.com/nacos-group/nacos-docker.git

docker-compose -f nacos-docker/example/standalone-derby.yaml up -d

以上運行完成後會在本地 8848啓動一個 nacos服務

  • 控制面板訪問 http://localhost:8848/nacos默認賬戶和密碼是 nacos
  • nacos默認 registry的類型是 file用默認的就行

二、創建一個 springboot項目

<!--提供 springboot 監控指標暴露-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--提供 nacos 服務註冊發現-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--提供 nacos 動態配置-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

三、實現動態配置

  • 登錄 nacos
    nacos中增加一個配置列表
Data Id Group 配置格式 配置內容
dev LC_GROUP YAML spring.profiles.active: dev
  • 在創建的項目中配置
    因爲 springboot的設定是 bootstrap.yml最高優先級,所以創建一個 bootstrap.yml,寫入如下內容
spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      config:
        server-addr: localhost:8848  #Nacos服務器偵聽器的IP和端口 #80不能省略
        file-extension: yaml
        group: LC_GROUP  # 與Nacos配置的組名相同 默認是 DEFAULT_GROUP
        timeout: 3000   # 從nacos獲取配置超時
        name: dev  #對應配置的data名
  • 在啓動入口上加上 @EnableDiscoveryClient註解
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConsumerApplication{

	public static void main(String[] args) {
		SpringApplication.run(NacosConsumerApplication.class, args);
	}

        @LoadBalanced
	@Bean
	public RestTemplate restTemplate() {
		return new RestTemplate();
	}
}

四、測試動態配置

  • 代碼
@RestController
@RequestMapping("/config")
@RefreshScope //Nacos動態刷新配置 需要熱加載的bean需要加上@RefreshScope註解,當配置發生變更的時候可以在不重啓應用的前提下完成bean中相關屬性的刷新
public class ConfigController {

    @Value("${spring.profiles.active}")
    String active;
    @Autowired
    RestTemplate restTemplate;

    /**
     * http://localhost:8080/config/get
     */
    @GetMapping("get")
    public String get(@RequestParam(required = false) String str) {
        return active + " | " + str;
    }

    /**
     * http://localhost:8080/config/rest
     */
    @SentinelResource("ss")
    @GetMapping("rest")
    public String rest() {
        return restTemplate.getForObject("http://nacos-provider/config/get/" + "?str=consumerSend", String.class);
    }
}
  • 啓動項目後 訪問 http://localhost:8080/config/get
  • 更改原先在 nacos增加的 Data Iddev的配置表,將配置內容改爲 spring.profiles.active: test無需重啓服務,直接刷新上一步的訪問地址

到此 nacos的動態配置已經完成

歡迎關注我的個人公衆號

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