Spring Cloud 學習 - Nacos服務註冊與發現

Spring Cloud 學習 - Nacos服務註冊與發現

Nacos,一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。
本文將介紹Nacos作爲服務註冊中心與Spring Cloud的整合實例。

關於Nacos的安裝請參考 Nacos之單機版安裝Nacos高可用集羣搭建+MySQL持久化

Nacos的詳細介紹可以查閱官網 https://nacos.io/zh-cn/index.html,這裏不多介紹~~

主要版本

本文使用的相關技術主要依賴版本如下:

Spring Cloud Spring Cloud Alibaba Spring Boot
Hoxton.SR3 2.2.0.RELEASE 2.2.5.RELEASE

好了,下邊開始進入代碼整合環節~~

服務提供者

首先我們新建一個服務提供者spring-cloud-alibaba-provider

添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

編寫配置

編寫yml配置把服務註冊到nacos註冊中心

server:
  port: 8801
spring:
  application:
    name: cloud-alibaba-provider
  cloud:
    nacos:
      server-addr: localhost:8848 # 默認localhost:8848,一致可不寫
#      server-addr: 192.168.0.14:8800
  # 下邊這個是devtools熱部署插件端口號,爲了避免本地開的多個服務端口衝突,所以這裏指定一下
  devtools:
    livereload:
      port: 35735

啓用註解

@SpringBootApplication
@EnableDiscoveryClient // 啓用服務發現功能
public class AliProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(AliProviderApplication.class, args);
    }
}

編寫接口

我們對外提供一個接口,簡單的輸出Hello, ${name}!

@RestController
public class HelloController {

    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/{name}")
    public String hello(@PathVariable String name){
        return "Hello, " + name +"!\nFrom:" + serverPort;
    }
}

至此,服務提供者基本編好了。
下邊編寫一個服務消費者

服務消費者

新建一個服務消費者spring-cloud-alibaba-consumer

相關依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

編寫配置

server:
  port: 8080
spring:
  application:
    name: cloud-alibaba-consumer
  cloud:
    nacos:
      server-addr: localhost:8848

啓用註解

@SpringBootApplication
@EnableDiscoveryClient
public class AliConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(AliConsumerApplication.class, args);
    }

    /**
     * 通過查看nacos依賴我們發現已經集成了ribbon,所以我們可以直接使用`@LoadBalanced`註解來開啓負載均衡
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

這裏我們通過查看spring-cloud-starter-alibaba-nacos-discovery依賴,發現已經集成了Ribbon,那麼應該就可以使用Ribbon的負載均衡了。
在這裏插入圖片描述

編寫接口

@RestController
@RequiredArgsConstructor
public class HelloController {

    private final RestTemplate restTemplate;

    @GetMapping("/consumer/{name}")
    public String hello(@PathVariable String name) {
        return restTemplate.getForObject("http://cloud-alibaba-provider/" + name, String.class);
    }
}

進行測試

啓動Nacos

啓動服務註冊中心Nacos
在這裏插入圖片描述

啓動服務提供者

啓動2個服務提供者spring-cloud-alibaba-provider,端口分別爲8081和8082:
多個啓動可以在控制檯指定端口進行啓動,也可以在IDEA中複製啓動配置,修改端口啓動。

命令行啓動方式如下:

java -jar yourapp.jar --server.port=8080

啓動服務消費者

啓動服務消費者spring-cloud-alibaba-consumer

訪問測試

使用curl命令行調用結果:
GiJBGD.md.png
可以看到,使用了Ribbon的默認負載均衡策略。

以上便是Spring Cloud使用Nacos服務註冊發現與發現的簡單應用。

因個人能力有限,文中如有不足或錯誤之處,歡迎指正,感謝~~

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