Nacos整合學習入門

小白先生哦發表於2021-01-20

微服務註冊中心nacos學習:先嚐試使用它,然後擼它原始碼搞懂它。

在這裡整理一下自己之前整合nacos的內容。

我的github地址:https://github.com/mrxiaobai-wen/springcloud_study.git

前置條件:下載nacos並安裝啟動。

服務提供者整合

建立一個Spring Cloud專案,即nacos-server-spring-cloud。

引入Nacos的依賴

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

配置nacos連線

bootstrap.yml配置內容:

server:
  port: 8021

spring:
  application:
    name: nacos-server-spring-cloud
  cloud:
    nacos:
      discovery:
        server-addr: http://localhost:8848
      config:
        server-addr: http://localhost:8848
        file-extension: yaml

在application.yml中新增一個ceshi.version配置,用於後面測試nacos配置中心:

ceshi:
  version: dev

建立啟動類

@SpringBootApplication
@EnableDiscoveryClient
@EnableConfigurationProperties
public class NacosServerSpringCloudApplication {

    @Resource
    private ConfigBean configBean;

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

    @RestController
    class EchoController {
        @RequestMapping(value = "/server/echo/{string}", method = RequestMethod.GET)
        public String echo(@PathVariable String string) {
            return "Hello Nacos Discovery " + string + " 當前版本:" + configBean.getVersion();
        }
    }

}
@ConfigurationProperties("ceshi")
@Component
public class ConfigBean {

    public String version;

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }
}

就這樣,啟動上面的NacosServerSpringCloudApplication後,就可以在本地nacos服務列表中檢視到當前服務了,然後在nacos配置中心裡面新建一個nacos-server-spring-cloud.yml檔案,變更釋出ceshi.version的值,然後訪問localhost:8021/server/echo/{string}就可以看到變更的內容了。

這樣就簡單的完成了服務註冊和配置動態管理。

採坑

我在最開始的時候,將bootstrap.yml的內容放在application.yml中,然後在配置中心一起釋出,但是配置變更一直沒有生效。然後經過一番摸索後,拆成了bootstrap.yml和application.yml兩個配置檔案後,配置動態變更生效了。

Spring Cloud獲取資料的時候,其dataId的拼接格式為:${prefix} - ${spring.profiles.active} . ${file-extension}。其中prefix預設為spring.application.name的值,如果配置了多環境,spring.profiles.active即為配置的環境的值。

服務消費者整合

建立一個Spring Cloud專案,即nacos-consumer-spring-cloud。

依賴與上面一致。application.yml配置也與上面一致。

建立啟動類

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerSpringCloudApplication {

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

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

    @RestController
    public class TestController {

        private final RestTemplate restTemplate;

        @Autowired
        public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}

        @RequestMapping(value = "/consumer/echo/{str}", method = RequestMethod.GET)
        public String echo(@PathVariable String str) {
            return restTemplate.getForObject("http://nacos-server-spring-cloud/server/echo/" + str, String.class);
        }
    }
}

然後將上面的nacos-server-spring-cloud和這個消費服務一起啟動。然後訪問當前的消費服務,訪問/consumer/echo/{str}介面,可以看到請求最終轉到了上面的那個服務中。

而我們的請求地址是http://nacos-server-spring-cloud/server/echo/,這就是註冊中心的作用,我們不用關注server服務的具體地址,只是請求nacos-server-spring-cloud即可。

相關文章