一、簡介
1.1為什么叫Nacos
Naming和Configuration的前兩個字母呆盖,最后的s是Service
1.2是什么
一個更易于構建云原生應用的動態(tài)服務發(fā)現(xiàn)拖云、配置管理和服務管理平臺。其實就是注冊中心加配置中心的組合应又,技術來看就是Nacos=Eureka+Config+Bus
二.安裝并運行Nacos
下載完成后宙项,打開bin目錄
#linux:
./startup.sh -m standalone
#windows:
cmd startup.cmd
運行成功后訪問http://localhost:8848/nacos
三、Nacos之服務提供者注冊
1株扛、建module
2尤筐、寫pom
- 在父pom上加上以下依賴
<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>
- 微服務提供者模塊加上以下依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3、寫yml
server:
port: 9002
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
4洞就、主啟動(nacos用的都是EnableDiscoveryClient注解盆繁,很重要)
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class, args);
}
}
5、業(yè)務類
@RestController
public class PaymentController {
@Value("${server.port}")
private String serverPort;
@GetMapping("/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id) {
return "nacos serverPort:" + serverPort + "\t id" + id;
}
}
根據(jù)以上9001再搭建一個9002作為服務提供者集群
四旬蟋、Nacos之服務消費者注冊
1油昂、建module
2、寫pom
和微服務提供端加的依賴相同
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3倾贰、寫yml
server:
port: 8300
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
#消費者將要去訪問的微服務名稱(注冊成功進nacos的微服務提供者)
service-url:
nacos-user-service: http://nacos-payment-provider
4冕碟、啟動類
@SpringBootApplication
@EnableDiscoveryClient
public class OrderNacosMain8300 {
public static void main(String[] args) {
SpringApplication.run(OrderNacosMain8300.class, args);
}
}
5、配置類
首先要加一個配置類匆浙,因為Nacos自帶負載均衡安寺,如下可以發(fā)現(xiàn),nacos的依賴中帶有ribbon的依賴首尼,因為有ribbon挑庶,所以就需要加一個配置類。
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
6饰恕、業(yè)務類
@RestController
@Slf4j
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serverUrl;
@GetMapping(value = "/consumer/payment/nacos/{id}")
public String getPaymentInfo(@PathVariable("id") Long id) {
return restTemplate.getForObject(serverUrl + "/payment/nacos/" + id, String.class);
}
}
五挠羔、Nacos服務注冊中心對比提升
CAP:
- C指的是:所有節(jié)點在同一時間看到的數(shù)據(jù)是一致的;
- A的定義高可用是所有的請求都會響應埋嵌。
- P則是分區(qū)容錯屬性破加。
AP模式
如果不需要存儲服務級別的信息并且服務實例是通過nacos-client注冊,并且能夠保持心跳上報雹嗦,那么就可以選擇AP模式范舀,當前主流的服務SpringCloud和Dubbo服務合是,都適用于AP模式,AP模式為了服務的可能性而減弱了一致性锭环,因此AP模式下只注冊臨時實例聪全。
CP模式
如果需要在服務級別編輯或者存儲配置信息,那么CP是必須的辅辩,K8S服務和DNS服務則適用于CP模式难礼,CP模式下則支持持久化實例,此時則是以Raft協(xié)議為集群運行模式玫锋,該模式下注冊實例之前必須先注冊服務蛾茉,如果服務不存在,則會返回錯誤撩鹿。
切換模式
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
六谦炬、Nacos服務配置中心(替代config)
一、怎么用
1节沦、建Module
cloudalibaba-config-nacos-client3377
2键思、寫pom
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3、寫yml
注意這里是兩個配置文件甫贯,一個是bootstrap.yml吼鳞,另一個是application.yml,前者優(yōu)先級高于后者叫搁。
#bootstrap.yml的配置
#nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos服務注冊中心地址
config:
server-addr: localhost:8848 #nacos作為配置中心地址
file-extension: yaml #指定yaml格式的配置
#application.yml的配置
spring:
profiles:
active: dev #表示開發(fā)環(huán)境
4赖条、主啟動類
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
5、業(yè)務類
@RestController
@RefreshScope //支持Nacos的動態(tài)刷新功能
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
6常熙、Nacos中進行配置
見官網(wǎng)https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
7、測試
在瀏覽器中輸入映射地址就可以顯示配置信息(而且在nacos修改配置信息之后可以直接廣播生效碱茁,直接刷新就可以)
8裸卫、Nacos的NameSpace、Group纽竣、DataID
在nacos中添加分組設置后墓贿,在IDEA中可以指定訪問那個個命名的空間、在指定命名的Group蜓氨,然后指定DataID聋袋,就是是一個工程一樣,多級目錄
#nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos服務注冊中心地址
config:
server-addr: localhost:8848 #nacos作為配置中心地址
file-extension: yaml #指定yaml格式的配置
#在config中添加group屬性可以指定訪問配置的分組
group:
#對應著在nacos中添加命名空間時生成的ID
namespace:
七穴吹、Nacos集群和持久化配置(重點)
1幽勒、官網(wǎng)說明
Nacos默認使用嵌入式數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)的存儲(也就是說,當關閉Nacos之后港令,重啟Nacos之后之前的配置依然在啥容,數(shù)據(jù)實際是存儲在數(shù)據(jù)庫中的)锈颗。但是,如果啟動多個默認配置下的Nacos節(jié)點咪惠,數(shù)據(jù)存儲存在一致性問題击吱。所以,Nacos采用了集中式存儲的方式來支持集群化部署遥昧,目前只支持MySQL的存儲覆醇。配置MySQL數(shù)據(jù)庫之后,所有寫入嵌入書數(shù)據(jù)庫的數(shù)據(jù)就可以都存儲到MySQL了炭臭。
Nacos支持三種部署模式:
單機模式:用于測試和單機使用
集群模式:用于生產(chǎn)環(huán)境永脓,確保高可用
多集群模式:用于多數(shù)據(jù)中心場景
2、Nacos持久化解釋
Nacos自帶的是derby數(shù)據(jù)庫徽缚,怎么將derby切換到MySQL憨奸?
- 1、找到nacos/conf/nacos-mysql.sql文件凿试,放到MySQL中執(zhí)行
- 2排宰、修改nacos/conf/application.properties文件
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://ip地址:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
-
3、因為登陸報錯那婉,將mysql驅動jar包替換
image.png
3板甘、Linux版Nacos+MySQL生產(chǎn)環(huán)境配置
linux的切換數(shù)據(jù)源的配置和上述相同臣疑,在完成上述配置之后盯仪,搭建集群只需要更改如下配置
①趴腋、修改nacos/conf/cluster.conf.example
②俏让、修改nacos/bin/startup.sh
③茵臭、運行集群
#輸入以下命令就可以運行集群了
./startup.sh -p 3333
./startup.sh -p 4444
./startup.sh -p 5555
④市怎、配置Nginx
學完Nginx再回來看第110節(jié)鸯檬,最后效果如下