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命令行調用結果:
可以看到,使用了Ribbon的默認負載均衡策略。
以上便是Spring Cloud使用Nacos服務註冊發現與發現的簡單應用。
因個人能力有限,文中如有不足或錯誤之處,歡迎指正,感謝~~