Nacos
什么是nacos
nacos (Nacos:Dynamic Naming and Configuration Service) 一個更易于構建云原生應用的動態服務發
現,配置管理和服務管理中心
Nacos就是注冊中心+配置中心的組合 等價于 netflix版本的 Eureka+Config+Bus+zik
解決了什么痛點
- 之前我們在netflix版本遇到的配置需要手動的區分發資訊,
- 杜絕了我們需要專門自己建一個注冊中心的包,阿里給我們提供了開箱即用的發行版本,我們只需要簡單的配置,直接腳本啟動
- 可以直接查看到集群資訊,和呼叫鏈路
如何獲得和社區檔案
下載地址 :https://github.com/alibaba/Nacos
中文檔案地址 :https://nacos.io/zh-cn/index.html
官方檔案地址 :https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery
主流注冊中心對比

安裝nacos
環境:
- java 8
- Maven
解壓安裝包,直接運行bin目錄下的startup.cmd
2.xx版本,需要修改單機版本,然后用命令啟動 startup.cmd -m standalone
命令運行成功后直接訪問http://localhost:8848/nacos
就是這么簡單

作為服務注冊中心
我們新建兩個模塊
基于nacos的服務提供者集群:cloudalibaba-provider-payment9001
基于nacos的服務提供者集群:cloudalibaba-provider-payment9002
cloudalibaba-provider-payment9001
nacos需要的主要依賴包
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
核心組態檔
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
#注冊到nacos
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
配置注意項
- 一定要匯入服務暴露
- 配置的時候 要加入 nacos的地址
撰寫一個方法測驗
package com.atguigu.springcloud.alibaba.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PaymentController
{
@Value("${server.port}")
private String serverPort;
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id)
{
return "nacos registry, serverPort: "+ serverPort+"\t id"+id;
}
}
主啟動類加上注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class,args);
}
}
啟動服務,就可以在nacos中看到我們的服務了

集群另一個模塊 參考 9001的撰寫方式
作為服務配置中心
我們來建一個demo來體驗一下,nacos的動態配置
配置模塊 :cloudalibaba-config-nacos-client3377
基礎配置
匯入需要的jar包
<dependencies>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--web + actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--一般基礎配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
撰寫組態檔
這里引入一個概念
bootstrap的啟動優先級比application高
為了確保我們的nacos上的配置被加載成功
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服務注冊中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
撰寫一個查看測驗資訊的controller
package com.atguigu.springcloud.alibaba.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
RefreshScope 我們可以使用 cloud的原生注解,來實作動態查看配置重繪,
創建一個nacos上的配置

nacos 中的配置規則

之后啟動就可以在nacos上更改配置了
nacos配置持久化
我們可以試驗一下,配置都時候 nacos是自帶了一個嵌入式資料庫derby
我們這里可以修改設定,到自己的mysql上
先去nacos的檔案夾中找到,nacos的sql的腳本

匯入到mysql中 創建一個資料庫 nacos_config

之后找到application檔案
修改配置
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config_tmall?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC
db.user=root
db.password=root
之后啟動nacos ,就會看到全新的naocs 我們之后再創建的各種配置,就會保存在我們自己創建的資料庫中
小結
使用過Eureka之后,使用nacos,感受到nacos是十分優秀的一款注冊中心,我們可以快速啟動,省去了很多的配置,這個技術簡化了我們想要使用注冊中心和動態配置查看鏈路需要的繁瑣配置,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/345798.html
標籤:其他
上一篇:JavaSE:方法
下一篇:2021-11-02
