Nacos注冊中心的幾種調用方式詳解
1.什么是注冊中心?
注冊中心(Registry)是一種用于服務發(fā)現和服務注冊的分布式系統(tǒng)組件。它是在微服務架構中起關鍵作用的一部分,用于管理和維護服務實例的信息以及它們的狀態(tài)。
它的執(zhí)行流程如下圖所示:

注冊中心充當了服務之間的中介和協(xié)調者,它的主要功能有以下這些:
- 服務注冊:服務提供者將自己的服務實例信息(例如 IP 地址、端口號、服務名稱等)注冊到注冊中心。通過注冊中心,服務提供者可以將自己的存在告知其他服務。
- 服務發(fā)現:服務消費者通過向注冊中心查詢服務信息,獲取可用的服務實例列表。通過注冊中心,服務消費者可以找到并連接到需要調用的服務。
- 健康檢查與負載均衡:注冊中心可以定期檢查注冊的服務實例的健康狀態(tài),并從可用實例中進行負載均衡,確保請求可以被正確地轉發(fā)到可用的服務實例。
- 動態(tài)擴容與縮容:在注冊中心中注冊的服務實例信息可以方便地進行動態(tài)的增加和減少。當有新的服務實例上線時,可以自動地將其注冊到注冊中心。當服務實例下線時,注冊中心會將其從服務列表中刪除。
使用注冊中心有以下優(yōu)勢和好處:
- 服務自動發(fā)現和負載均衡:服務消費者無需手動配置目標服務的地址,而是通過注冊中心動態(tài)獲取可用的服務實例,并通過負載均衡算法選擇合適的實例進行調用。
- 服務彈性和可擴展性:新的服務實例可以動態(tài)注冊,并在發(fā)生故障或需要擴展時快速提供更多的實例,從而提供更高的服務彈性和可擴展性。
- 中心化管理和監(jiān)控:注冊中心提供了中心化的服務管理和監(jiān)控功能,可以對服務實例的狀態(tài)、健康狀況和流量等進行監(jiān)控和管理。
- 降低耦合和提高靈活性:服務間的通信不再直接依賴硬編碼的地址,而是通過注冊中心進行解耦,使得服務的部署和變更更加靈活和可控。
常見的注冊中心包括 ZooKeeper、Eureka、Nacos 等。這些注冊中心可以作為微服務架構中的核心組件,用于實現服務的自動發(fā)現、負載均衡和動態(tài)擴容等功能。
2.方法概述
當 Nacos 中注冊了 Restful 接口時(一種軟件架構風格,它是基于標準的 HTTP 協(xié)議和 URI 的一組約束和原則),其調用方式主要有以下兩種:
- 使用 RestTemplate + Spring Cloud LoadBalancer
使用 OpenFeign + Spring Cloud LoadBalancer
3.RestTemplate+LoadBalancer調用
此方案的實現有以下 3 個關鍵步驟:
- 添加依賴:nacos + loadbalancer
- 設置配置文件
- 編寫調用代碼
具體實現如下。
3.1 添加依賴
<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>3.2 設置配置文件
spring:
application:
name: nacos-discovery-business
cloud:
nacos:
discovery:
server-addr: localhost:8848
username: nacos
password: nacos
register-enabled: false3.3 編寫調用代碼
此步驟又分為以下兩步:
- 給 RestTemplate 增加 LoadBalanced 支持
使用 RestTemplate 調用接口
3.3.1 RestTemplate添加LoadBalanced
在 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);
}
}3.3.2 使用RestTemplate
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);
}
}4.OpenFeign+LoadBalancer調用
此步驟又分為以下 5 步:
- 添加依賴:nacos + openfeign + loadbalancer
- 設置配置文件
- 開啟 openfeign 支持
- 編寫 service 代碼
- 調用 service 代碼
具體實現如下。
4.1 添加依賴
<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>4.2 設置配置文件
spring:
application:
name: nacos-discovery-business
cloud:
nacos:
discovery:
server-addr: localhost:8848
username: nacos
password: nacos
register-enabled: false4.3 開啟OpenFeign
在 Spring Boot 啟動類上添加 @EnableFeignClients 注解。
4.4 編寫Service
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);
}4.5 調用Service
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);
}
}5.獲取本文源碼
因平臺不能上傳附件,所以想要獲取本文完整源碼,請聯(lián)系我:gg_stone,備注:Nacos 源碼,不然不予通過。
6.版本說明
本文案例基于以下版本:
- JDK 17
- Spring Boot 3.x
- Spring Cloud Alibaba 2022.0.0.0
- Nacos 2.2.3
7.小結
注冊中心作為微服務中不可或缺的重要組件,在微服務中充當著中介和協(xié)調者的作用。而 Nacos 作為近幾年來,國內最熱門的注冊中心,其 Restf 接口調用有兩種方式:RestTemplate + LoadBalancer 和 OpenFeign + LoadBalancer,開發(fā)者可以根據自己的實際需求,選擇相應的調用方式。
以上就是Nacos注冊中心有幾種調用方式?的詳細內容,更多關于Nacos注冊中調用方式的資料請關注腳本之家其它相關文章!
相關文章
Java實現MySQL數據實時同步至Elasticsearch的方法詳解
MySQL擅長事務處理,而Elasticsearch(ES)則專注于搜索與分析,將MySQL數據實時同步到ES,可以充分發(fā)揮兩者的優(yōu)勢,下面我們就來看看如何使用Java實現這一功能吧2025-03-03

