什么是Nacos?
- 官方文檔
- 概括:服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)共享與管理等
解決什么問(wèn)題?
- 服務(wù)直接如何相互調(diào)用
- 服務(wù)的配置管理
服務(wù)架構(gòu)

服務(wù)架構(gòu)圖
搭建Nacos Server
- 下載 nacos-server 安裝包
- 安裝
- 瀏覽器執(zhí)行: http://localhost:8848/nacos 效果
編寫(xiě)Client代碼,實(shí)現(xiàn)服務(wù)間調(diào)用
- 創(chuàng)建SpringBoot項(xiàng)目 (user-server)
- 引入依賴(lài)
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> </dependency> </dependencies> - application.yml 配置
# 配置服務(wù)端口 server: port: 8801 spring: # 配置服務(wù)名稱(chēng) application: name: user-server # 配置nacos注冊(cè)中心地址 cloud: nacos: discovery: server-addr: localhost:8848 - 以同樣的步驟創(chuàng)建一個(gè) order-server
-
啟動(dòng)服務(wù),在nacos頁(yè)面可以看到兩個(gè)服務(wù)已經(jīng)注冊(cè)Nacos Server Web UI
- order-server 提供一個(gè)API
# order-server @RestController @RequestMapping("/orders") public class OrderController { @GetMapping("/{orderId}") public String getOrderById(@PathVariable String orderId) { return orderId + " - orders"; } } - user-server 使用 RestTemplate 實(shí)現(xiàn)調(diào)用 order-server
# user-server @Service public class UserServiceImpl implements UserService { @Autowired private DiscoveryClient discoveryClient; @Autowired private RestTemplate restTemplate; @Override public String getUserOrderById(String orderId) { List<ServiceInstance> instances = discoveryClient.getInstances("order-server"); String userServerAddress = instances.stream() .map(ServiceInstance::getUri) .findFirst().orElseThrow(() -> new RuntimeException("No Instances.")) .toString(); return restTemplate.getForObject( userServerAddress + "/orders/{orderId}", String.class, orderId); } } - 為了方便測(cè)試,這里使用junit,停掉已經(jīng)啟動(dòng)的 user-server
@Autowired private UserService userService; @Test public void getOrderById() { String order = userService.getUserOrderById("E000202003170001"); System.out.println(order); } -
結(jié)果結(jié)果


