Spring Cloud Alibaba Nacos 作為近幾年最熱門的註冊中心和設定中心,也被國內無數公司所使用,今天我們就來看下 Nacos 作為註冊中心時,呼叫它的介面有幾種方式?
註冊中心(Registry)是一種用於服務發現和服務註冊的分散式系統元件。它是在微服務架構中起關鍵作用的一部分,用於管理和維護服務範例的資訊以及它們的狀態。
它的執行流程如下圖所示:
註冊中心充當了服務之間的中介和協調者,它的主要功能有以下這些:
使用註冊中心有以下優勢和好處:
常見的註冊中心包括 ZooKeeper、Eureka、Nacos 等。這些註冊中心可以作為微服務架構中的核心元件,用於實現服務的自動發現、負載均衡和動態擴容等功能。
當 Nacos 中註冊了 Restful 介面時(一種軟體架構風格,它是基於標準的 HTTP 協定和 URI 的一組約束和原則),其呼叫方式主要有以下兩種:
此方案的實現有以下 3 個關鍵步驟:
具體實現如下。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
spring:
application:
name: nacos-discovery-business
cloud:
nacos:
discovery:
server-addr: localhost:8848
username: nacos
password: nacos
register-enabled: false
此步驟又分為以下兩步:
在 Spring Boot 啟動類上新增「@EnableDiscoveryClient」註解,並使用「@LoadBalanced」註解替換 IoC 容器中的 RestTemplate,具體實現程式碼如下:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class BusinessApplication {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(BusinessApplication.class, args);
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/business")
public class BusinessController2 {
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/getnamebyid")
public String getNameById(Integer id){
return restTemplate.getForObject("http://nacos-discovery-demo/user/getnamebyid?id="+id,
String.class);
}
}
此步驟又分為以下 5 步:
具體實現如下。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
spring:
application:
name: nacos-discovery-business
cloud:
nacos:
discovery:
server-addr: localhost:8848
username: nacos
password: nacos
register-enabled: false
在 Spring Boot 啟動類上新增 @EnableFeignClients 註解。
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Service
@FeignClient(name = "nacos-producer") // name 為生產者的服務名
public interface UserService {
@RequestMapping("/user/getinfo") // 呼叫生產者的介面
String getInfo(@RequestParam String name);
}
import com.example.consumer.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class OrderController {
@Autowired
private UserService userService;
@RequestMapping("/order")
public String getOrder(@RequestParam String name){
return userService.getInfo(name);
}
}
因平臺不能上傳附件,所以想要獲取本文完整原始碼,請聯絡我:gg_stone,備註:Nacos 原始碼,不然不予通過。
本文案例基於以下版本:
註冊中心作為微服務中不可或缺的重要元件,在微服務中充當著中介和協調者的作用。而 Nacos 作為近幾年來,國內最熱門的註冊中心,其 Restf 介面呼叫有兩種方式:RestTemplate + LoadBalancer 和 OpenFeign + LoadBalancer,開發者可以根據自己的實際需求,選擇相應的呼叫方式。
本文已收錄到我的面試小站 www.javacn.site,其中包含的內容有:Redis、JVM、並行、並行、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、設計模式、訊息佇列等模組。