什么是Nacos
Nacos是一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平台。
Nacos 致力於幫助您發現、配置和管理微服務。Nacos提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。
Nacos 幫助您更敏捷和容易地構建、交付和管理微服務平台。 Nacos 是構建以“服務”為中心的現代應用架構 (例如微服務范式、雲原生范式)的服務基礎設施。
使用Nacos組件可以作為微服務架構的注冊中心和配置中心,可以簡單理解為可以代替Netflix解決方案中的Eureka組件和Spring Cloud Config組件。
Nacos官方地址:https://nacos.io/zh-cn/index.html
主要功能
- 動態配置服務
動態配置服務讓您能夠以中心化、外部化和動態化的方式管理所有環境的配置。動態配置消除了配置變更時重新部署應用和服務的需要。配置中心化管理讓實現無狀態服務更簡單,也讓按需彈性擴展服務更容易。
- 服務發現及管理
動態服務發現對以服務為中心的(例如微服務和雲原生)應用架構方式非常關鍵。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服務發現。Nacos也提供實時健康檢查,以防止將請求發往不健康的主機或服務實例。借助Nacos,您可以更容易地為您的服務實現斷路器。
- 動態DNS服務
通過支持權重路由,動態DNS服務能讓您輕松實現中間層負載均衡、更靈活的路由策略、流量控制以及簡單數據中心內網的簡單DNS解析服務。動態DNS服務還能讓您更容易地實現以DNS協議為基礎的服務發現,以消除耦合到廠商私有服務發現API上的風險。
安裝單機版Nacos
Nacos下載地址:https://github.com/alibaba/nacos/releases
截止目前最新版本為:1.1.4
下載之后解壓進入到bin目錄執行啟動命令:sh startup.sh -m standalone
命令參數中-m表示模式mode,standalone表示啟動的是單機版模式,windows用戶可以使用該命令啟動Nacos: cmd startup.cmd -m standalone
執行啟動命令之后可以查看到啟動日志:tail -fn 200 /home/server/nacos/logs/start.out
Nacos是一個用Java語言編寫的web項目,Tomcat默認端口是8848,訪問8848端口可以打開Nacos管理台。
默認用戶名和密碼都是nacos
Nacos管理台菜單包含了四大部分:
- 配置管理(管理配置中心)
- 服務管理(管理注冊中心)
- 命名空間
- 集群管理
使用Nacos注冊中心功能
生產者服務
第一步:創建一個nacos-test項目,包含兩個模塊nacos-provider和nacos-consumer,在父項目pom.xml文件統一管理springboot、spring cloud和spring cloud alibaba版本。
<dependencyManagement>
<dependencies>
<!--spring-boot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud-alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
第二步:先來處理nacos-provider模塊項目,在nacos-provider模塊項目的pom.xml配置alibaba-nacos-discovery依賴。
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<optional>true</optional>
</dependency>
<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>
<!--nacos注冊中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
第三步:編寫入口類NacosProvider ,並添加一個EchoController 提供HTTP接口服務。
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProvider {
public static void main(String[] args) {
SpringApplication.run(NacosProvider.class,args);
}
@RestController
class EchoController {
@GetMapping("/echo/{string}")
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
第四步:在bootstrap.yml文件配置nacos配置中心相關參數。
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
server-addr: 192.168.0.127:8848 #注冊中心地址
server:
port: 17357
第五步:運行nacos-provider,可以從啟動日志看到注冊到了nacos,打開nacos管理台在服務管理菜單下的服務列表項可以看到注冊的實例信息。
消費者服務
第一步:接下來處理nacos-consumer模塊項目,在nacos-consumer模塊項目的pom.xml配置同樣加上alibaba-nacos-discovery依賴。
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<optional>true</optional>
</dependency>
<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>
</dependencies>
第二步:編寫入口類NacosConsumer ,並添加一個TestController提供HTTP接口服務,通過RestTemplate遠程調用NacosProvider。
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumer {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumer.class,args);
}
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@GetMapping("/echo/{str}")
public String echo(@PathVariable String str) {
return restTemplate.getForObject("http://nacos-provider/echo/" + str, String.class);
}
}
}
第三步:在bootstrap.yml文件配置nacos配置中心相關參數。
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.0.127:8848 #注冊中心地址
server:
port: 17358
第四步:測試消費者調用提供者接口服務。
nacos默認使用了ribbon做客戶端負載均衡。