1、Nacos簡介
Nacos的概念和功能
Nacos是一個面向微服務架構的動態服務發現、配置管理和服務治理平臺,它能夠幫助開發人員和運維人員實現服務注冊、配置管理、DNS和負載均衡等功能。
下面是一些Nacos的主要功能:
- 服務發現
- 配置管理
- DNS服務:Nacos支持將服務名解析為服務IP和端口號,提供了一種輕量級的服務發現方案,通過HTTP DNS協議來實現。
- 負載均衡
- 服務治理:Nacos通過服務治理功能,可以對服務實例進行管理和監控,包括實例上下線、心跳檢測、健康狀態等。同時,Nacos還支持路由策略、限流、熔斷降級等功能,提高了服務的可用性和穩定性。
總之,Nacos是一個強大的服務注冊與發現中心,提供了動態配置管理和服務治理等功能,幫助開發者輕松構建高可用、高性能的微服務架構。
2、安裝使用Nacos
2.1安裝Nacos
Nacos是一個基于Java開發的應用,它可以作為獨立的服務運行,也可以作為嵌入式組件在Java應用程序中使用。以下是Nacos的安裝和使用方法:
- 下載Nacos:https://github.com/alibaba/nacos/releases
- 安裝Nacos:將下載的Nacos壓縮包解壓到指定目錄,進入解壓后的目錄,運行bin目錄下的startup.sh(Linux/Mac)或startup.cmd(Windows)腳本即可啟動Nacos。
- 訪問Nacos控制臺:默認情況下,Nacos控制臺的訪問地址為 http://localhost:8848/nacos
- 注冊服務:在Nacos控制臺中,可以通過服務管理界面注冊服務,輸入服務名稱和IP地址等信息即可完成服務注冊。同時,可以設置服務的健康檢查、負載均衡等屬性。
- 獲取服務:在應用程序中,可以通過Nacos提供的Java SDK或HTTP API獲取已注冊的服務信息。
除此之外,Nacos還提供了豐富的配置管理功能,可以幫助開發者管理應用程序的配置信息。可以通過Nacos控制臺或API等方式實現配置的動態管理和實時更新。
注冊服務
Nacos的服務注冊和發現功能是其核心功能之一,下面是一個簡單的Java示例,演示如何使用Nacos SDK注冊服務:
- 添加依賴。在Maven項目中添加以下依賴:
< dependency >
< groupId >com.alibaba.nacos< /groupId >
< artifactId >nacos-client< /artifactId >
< version >2.0.2< /version >
< /dependency >
- 創建Nacos服務注冊實例:在Java應用程序中,可以通過以下代碼創建Nacos服務注冊實例,設置Nacos服務器的地址和端口號:
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingFactory;
import com.alibaba.nacos.api.naming.NamingService;
public class NacosServiceRegistry {
public static void main(String[] args) throws NacosException {
String serverAddr = "localhost:8848"; // Nacos服務器的地址和端口號
NamingService namingService = NamingFactory.createNamingService(serverAddr);
// 注冊服務
namingService.registerInstance("my-service", "127.0.0.1", 8080);
// 關閉Nacos服務注冊實例
namingService.shutdown();
}
}
- 注冊服務:通過
NamingService
對象的registerInstance()
方法注冊服務,需要指定服務的名稱、IP地址和端口號等信息,例如:
namingService.registerInstance("my-service", "127.0.0.1", 8080);
- 關閉服務注冊實例:在服務注冊完成后,需要關閉
NamingService
對象,例
namingService.shutdown();
以上是一個簡單的使用Nacos SDK注冊服務的示例,當然,在實際使用中,還需要考慮服務的健康檢查、負載均衡等問題。
配置服務
Nacos的配置管理功能可以幫助開發者動態管理應用程序的配置信息。下面是一個簡單的Java示例,演示如何使用Nacos SDK實現配置服務的獲取和監聽:
- 添加依賴,在Maven項目中添加以下依賴:
< dependency >
< groupId >com.alibaba.nacos< /groupId >
< artifactId >nacos-client< /artifactId >
< version >2.0.2< /version >
< /dependency >
- 創建Nacos配置服務實例:在Java應用程序中,可以通過以下代碼創建Nacos配置服務實例,設置Nacos服務器的地址和端口號:
import com.alibaba.nacos.api.config.ConfigFactory;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.exception.NacosException;
public class NacosConfigService {
public static void main(String[] args) throws NacosException {
String serverAddr = "localhost:8848"; // Nacos服務器的地址和端口號
String dataId = "my-config"; // 配置項的ID
String group = "DEFAULT_GROUP"; // 配置項的分組
// 創建Nacos配置服務實例
ConfigService configService = ConfigFactory.createConfigService(serverAddr);
// 獲取配置
String config = configService.getConfig(dataId, group, 5000);
System.out.println(config);
// 監聽配置
configService.addListener(dataId, group, new Listener() {
@Override
public void receiveConfigInfo(String config) {
System.out.println(config);
}
@Override
public Executor getExecutor() {
return null;
}
});
}
}
- 獲取配置:通過
ConfigService
對象的getConfig()
方法獲取指定配置項的配置信息,需要指定配置項的ID和分組等信息,例如:
String dataId = "my-config";
String group = "DEFAULT_GROUP";
String config = configService.getConfig(dataId, group, 5000);
System.out.println(config);
- 監聽配置:通過
ConfigService
對象的addListener()
方法監聽指定配置項的配置變化,需要實現Listener
接口中的receiveConfigInfo()
方法,例如:
configService.addListener(dataId, group, new Listener() {
@Override
public void receiveConfigInfo(String config) {
System.out.println(config);
}
@Override
public Executor getExecutor() {
return null;
}
});
以上是一個簡單的使用Nacos SDK實現配置服務的示例,當然,在實際使用中,還需要考慮配置的加密、灰度發布等問題。
服務發現
- 添加依賴,例如在Maven項目中添加以下依賴:
< dependency >
< groupId >com.alibaba.cloud< /groupId >
< artifactId >spring-cloud-starter-alibaba-nacos-discovery< /artifactId >
< version >2.2.3.RELEASE< /version >
< /dependency >
- 配置Nacos Server地址:在
application.properties
或application.yml
中,添加Nacos Server的地址和端口號:
spring.cloud.nacos.discovery.server-addr=localhost:8848
- 添加服務提供者:在Spring Boot應用程序中,添加一個服務提供者的REST接口,例如:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, world!";
}
}
- 添加服務消費者:在Spring Boot應用程序中,添加一個服務消費者的REST接口,例如:
@RestController
public class HelloConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/hello")
public String hello() {
String url = "http://my-service/hello";
String result = restTemplate.getForObject(url, String.class);
return result;
}
}
在上面的代碼中,RestTemplate
是Spring提供的一個用于發送HTTP請求的工具類。在hello()
方法中,通過RestTemplate
發送GET請求,請求URL為http://my-service/hello
,其中my-service
為服務提供者的服務名。
啟動服務:分別啟動服務提供者和服務消費者兩個Spring Boot應用程序,可以看到服務消費者通過服務發現機制自動發現了服務提供者,從而可以調用服務提供者的REST接口。
需要注意的是,Nacos服務發現默認使用Ribbon進行負載均衡,因此在上面的示例中,如果服務提供者有多個實例,服務消費者將會自動進行負載均衡,請求不同的服務實例。
配置中心
確保你已經在Nacos中創建了配置,例如:
# application.yml
example:
greeting: Hello, World!
接下來,在Spring Boot項目中添加依賴:
< dependency >
< groupId >com.alibaba.cloud< /groupId >
< artifactId >spring-cloud-starter-alibaba-nacos-config< /artifactId >
< version >${nacos.config.version}< /version >
< /dependency >
在Spring Boot的啟動類中添加@EnableDiscoveryClient
和@RefreshScope
注解,它們分別啟用服務發現和動態刷新配置:
javaCopy codeimport org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
@SpringBootApplication
@EnableDiscoveryClient
@RefreshScope
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
最后,在application.yml
中添加以下內容,告訴Spring Boot如何連接到Nacos服務器:
spring:
cloud:
nacos:
config:
server-addr: localhost:8848 # Nacos服務器地址
namespace: your-namespace # 命名空間
現在,你可以在你的代碼中使用@Value
注解來注入Nacos配置中心的值了,如下所示:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@Value("${example.greeting}")
private String greeting;
@GetMapping("/")
public String index() {
return greeting;
}
}
現在,當你更新Nacos中的配置時,Spring Boot應用程序將自動檢測到更改并動態地重新加載配置。
監控中心
Nacos監控中心可以幫助你實時監控Nacos實例的運行狀態,包括健康狀態、配置狀態、元數據狀態等。下面是使用Nacos監控中心的步驟:
- 確保Nacos已啟動并運行正常。
- 在Nacos控制臺中,點擊左側導航欄中的“監控”按鈕,進入監控中心頁面。
- 在監控中心頁面中,你可以看到以下三個部分:
- 首頁:顯示Nacos實例的整體健康狀態,包括Nacos實例數、實例狀態、服務數量、配置數量、命名空間數量等。
- 服務健康:顯示Nacos實例中每個服務的健康狀態,包括服務名稱、實例數、健康實例數、不健康實例數、最近一次健康狀態檢查時間等。
- 配置管理:顯示Nacos實例中每個配置的狀態,包括配置ID、配置Data ID、配置Group、配置類型、最近一次修改時間等。
- 如果你想查看更詳細的監控信息,可以點擊“服務健康”或“配置管理”頁面中的某個服務或配置,進入詳細信息頁面。
- 在詳細信息頁面中,你可以看到該服務或配置的實例列表、健康狀態、元數據信息等。
除了使用監控中心頁面,你也可以通過Nacos提供的API接口獲取監控信息。例如,你可以通過以下API接口獲取服務健康狀態:
GET /nacos/v1/ns/instance/health?serviceName=< serviceName >
其中,
是你要查詢的服務名稱。該接口將返回該服務的健康狀態信息。你也可以使用其他API接口獲取其他監控信息,具體請參考Nacos官方文檔。
3、Nacos與Eureka的區別
數據一致性實現方式不同
在Eureka 中,服務注冊和發現依賴于心跳檢測機制,每隔一段時間,客戶端會發送心跳包維護自己的狀態,并將服務狀態信息告知Eureka Server。而Nacos 的服務注冊與發現機制采用了更加強大的基于成熟Raft協議的Paxos算法實現讀寫數據一致性。
功能組件的支持程度不同
Nacos 提供了服務注冊、配置管理、流量控制、DNS 服務等一系列功能的支持,用來支持微服務架構的需要;而Eureka 則只提供了服務的注冊和發現功能,缺乏其他全方位的支持。開源社區活躍度不同
相較于Eureka,Nacos 的開源社區更為活躍,且已成為了 Apache 軟件基金會 Top-Level Project,開發進展速度更快。 節約開發成本
基本上,Nacos可以說是是一個功能豐富、易用性強、可擴展性好、高可用性的服務發現、配置管理和服務治理平臺。對于分布式系統的開發和運維來說,Nacos是一個非常好的選擇。
-
JAVA
+關注
關注
20文章
2983瀏覽量
106549 -
端口
+關注
關注
4文章
1006瀏覽量
32650 -
應用程序
+關注
關注
38文章
3316瀏覽量
58553 -
組件
+關注
關注
1文章
527瀏覽量
18252 -
nacos
+關注
關注
0文章
10瀏覽量
234
發布評論請先 登錄
Nacos是什么?Nacos配置管理技巧你知道嗎
支持Dubbo生態發展,阿里巴巴啟動新的開源項目 Nacos
構建ARM64版本nacos docker鏡像
還在為 Eureka 閉源擔心?Nacos 來了
Nacos發布0.5.0版本,輕松玩轉動態 DNS 服務
微服務配置中心實戰:Spring + MyBatis + Druid + Nacos

Nacos 1.1.4 發布,業界率先支持 Istio MCP 協議
Nacos服務地址動態感知原理
Nacos為什么這么強?Nacos注冊中心的底層原理,從服務注冊到服務發現
華為云CSE 關鍵特性,支持托管Nacos注冊配置中心

華為云微服務引擎0停機遷移Nacos?它是這樣做的
Nacos測試環境中cpu飆高的原因和解決方案

Nacos、OpenFeign、Ribbon組件協調工作的原理

Nacos實現原理:SpringCloud集成Nacos的實現過程

評論