上一篇文章,我們搭建好了nacos管理控制檯。本篇文章來體驗一下nacos作爲服務註冊與發現組件,這裏我選擇了通過springcloud alibaba整合nacos的方式,但是你需要注意,並不是說使用nacos一定要與springcloud alibaba框架整合,事實上,nacos可以與任何服務進行整合,提供了豐富的客戶端支持能力,比如
-
java
-
spring
-
springboot
-
springcloud
就是說,nacos提供了客戶端支持任何java項目,甚至計劃提供其它異構服務的的客戶端
-
node.js
-
c++
-
shell
-
python
控制面板截圖
從圖上看,還提供了各種應用接入的示例代碼,很貼心!對不對。
下面我們創建兩個服務,一個服務提供者,一個服務消費者,體驗一下nacos作爲服務註冊發現組件的強大之處。
1.搭建服務提供者
1.1.導入依賴
springcloud alibaba整合使用nacos服務註冊發現組件,需要引入依賴
<!--nacos discovery依賴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
1.2.編寫配置
server:
port: ${server.port:8080}
spring:
application:
name: follow-me-springloud-nacos-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
1.3.編寫應用
1.3.1.啓動類
/**
* <p>
* 啓動類
* </p>
*
* @author [email protected]
* @since 2021/8/11
*/
@SpringBootApplication
public class FollowMeNacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(FollowMeNacosProviderApplication.class, args);
}
}
1.3.2.rest接口
/**
* <p>
* 提供者controller
* </p>
*
* @author [email protected]
* @since 2021/8/11
*/
@RestController
@RequestMapping("provider")
@Slf4j
public class ProviderController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("test")
public String test(){
log.info("當前服務實例接收到請求,端口:{}", serverPort);
return "ProviderController---test.ok.port=" + serverPort;
}
}
1.3.3.啓動服務
啓動時,分別通過端口:8080、8081啓動兩個實例,從nacos控制檯上,可以看到註冊上來的服務提供者。
訪問8080:http://127.0.0.1:8080/provider/test
訪問8081:http://127.0.0.1:8081/provider/test
2.搭建服務消費者
2.1.導入依賴
<!--nacos discovery依賴-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.2.編寫配置
server:
port: 8090
spring:
application:
name: follow-me-springloud-nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
2.3.編寫應用
2.3.1.啓動類
/**
* <p>
* 啓動類
* </p>
*
* @author [email protected]
* @since 2021/8/11
*/
@SpringBootApplication
public class FollowMeNacosConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(FollowMeNacosConsumerApplication.class, args);
}
}
2.3.2.配置類
使用RestTemplate實現遠程調用,且配合Ribbon組件實現負載均衡。
/**
* <p>
* 消費者配置類
* </p>
*
* @author [email protected]
* @since 2021/8/11
*/
@Configuration
public class ConsumerConfiguration {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
2.3.3.rest接口
需要注意,在RestTemplate遠程調用時,是通過服務提供者的服務名稱:follow-me-springloud-nacos-provider,即通過nacos服務發現獲取服務實例,完成應用處理。
/**
* <p>
* 消費者controller
* </p>
*
* @author [email protected]
* @since 2021/8/11
*/
@RestController
@RequestMapping("consumer")
@Slf4j
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("test")
public String test(){
log.info("準備調用服務提供者api:follow-me-springloud-nacos-provider");
String result = restTemplate.getForObject("http://follow-me-springloud-nacos-provider/provider/test", String.class);
return result;
}
}
2.3.4.啓動服務
啓動消費者服務,從nacos管理控制檯看到消費者服務已經註冊上來。
2.3.5.驗證
訪問消費者端點:http://127.0.0.1:8090/consumer/test,觀察兩個provider實例控制檯輸出,實現了負載均衡,刷新六次,觀察是否兩個提供者實例控制檯各輸出3次
消費者控制檯
服務提供者8080控制檯
服務提供者8081控制檯
到此,我們通過springcloud alibaba整合nacos完成了一個有代表意義的服務註冊與發現,體驗還不錯吧!
本文源碼:https://gitee.com/yanghouhua/springcloud.git