SpringCloud12-Nacos
1.Nacos
- Nacos=Eureka+Config+Bus。
- acos前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。
- Nacos官网。https://nacos.io/zh-cn/。
2.Nacos下载和运行
- Nacos下载地址。https://github.com/alibaba/nacos/releases/tag/2.0.3。
- 下载完后直接解压,进入bin目录运行。运行命令startup.cmd -m standalone,单机运行。
- 访问地址。http://localhost:8848/nacos,默认账号密码都是nacos。
3.创建微服务cloud-nacos-provider-payment9001
- pom.xml
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- yml
server:
port: 9001
spring:
application:
name: cloud-nacos-provider-payment
cloud:
nacos:
discovery:
server-addr: http://127.0.0.1:8848
# SpringCloud Alibaba官方文档采用的配置
management:
endpoints:
web:
exposure:
include: "*"
- Main
@SpringBootApplication
@EnableDiscoveryClient
public class CloudNacosProviderPayment9001Main {
public static void main(String[] args) {
SpringApplication.run(CloudNacosProviderPayment9001Main.class, args);
}
}
- 创建cloud-nacos-provider-payment9002和cloud-nacos-provider-payment9001保持一致,作为生产者。
4.创建微服务cloud-nacos-consumer-order83
- pom.xml
<!-- Springcloud Alibaba在2020后就没有引入Ribbon进行负载均衡,要进行负载均衡需要引入
spring-cloud-starter-loadbalancer,
同时Eureka客户端默认也引入了spring-cloud-starter-loadbalancer
-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- yml、Main和业务代码不变。
- 通过order83使用微服务名称调用9001和9002。
5.Nacos的CAP理论
- Nacos支持在AP和CP中进行切换。
- —般来说,如果不需要存储服务级别的信息且服务实例是通过nacos-client注册,并能够保持心跳上报,那么就可以选择AP模式。
- 如果需要在服务级别编辑或者存储配置信息,那么CP是必须,如K8S服务和DNS服务则适用于CP模式。
- CP模式下则支持注册持久化实例,以Raft协议为集群运行模式,该模式下注册实例之前必须先注册服务,如果服务不存在,则会返回错误。
- AP和CP的切换命令:curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP。
6.创建微服务cloud-nacos-config-client3377
- pom.xml
<!--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>
<!-- Param ‘serviceName‘ is illegal, serviceName is blank。
需要引入 spring-cloud-starter-bootstrap 加载bootstrap配置文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
- bootstrap.yml和application.yml
# bootstrap.yml
server:
port: 3377
spring:
application:
name: cloud-nacos-config-client
cloud:
nacos:
discovery:
server-addr: http://127.0.0.1:8848
# Nacos作为配置中心
config:
server-addr: http://127.0.0.1:8848
file-extension: yml
group: DEFAULT_GROUP
# Nacos中配置文件的命名规范
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# cloud-nacos-config-client-dev.yml
# application.yml
spring:
profiles:
active: dev
- Main和controller不变。Controller需要使用@RefreshScope注解刷新配置。
- 在Nacos中添加cloud-nacos-config-client-dev.yml配置文件。
7.Nacos配置文件命名规范
- 官方给出的模板。${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension},即cloud-nacos-config-client-dev.yml。
- 配置文件可以通过命名空间(默认public)、分组(默认DEFAULT_GROUP)和DataId进行区分。
spring:
application:
name: cloud-nacos-config-client
cloud:
nacos:
discovery:
server-addr: http://127.0.0.1:8848
# Nacos作为配置中心
config:
server-addr: http://127.0.0.1:8848
file-extension: yml
# 分组
group: DEV_GROUP
# 在Nacos中创建命名空间后,产生的命名空间的id。
namespace: 0fac47b9-dd7c-4185-b999-44dd1cfc23db
8.Nacos集群-切换数据库
- Nacos集群文档地址。https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html。
- Nacos默认使用嵌入式数据库derby实现数据的存储,集群环境中要保证Nacos信息的一致性,就需要切换Nacos的数据库。
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
</dependency>
- 创建数据库。执行nacos\conf\nacos-mysql.sql脚本创建数据库。
- 修改nacos\conf\applicaiton.properties配置文件,末尾添加配置信息。
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
9.Nacos集群-集群搭建
- Nacos集群需要一个Nginx和三个Nacos。
- 修改nacos\conf\cluster.conf配置文件。
192.168.0.133:3333
192.168.0.133:4444
192.168.0.133:5555 # 将 3355 4444 5555 划分到一个集群。
- 修改启动脚本,增加-p参数,来设置启动的端口。新版本不需要这个步骤,默认下载的脚本就支持-p参数启动。
- 修改Nginx配置文件。
# cluster分流到三个服务上。
upstream cluster {
server 127.0.0.1:3333;
server 127.0.0.1:4444;
server 127.0.0.1:5555;
}
server {
#listen 80;
listen 1111; # 监听的端口
server_name localhost; # 监听的host
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#root html;
#index index.html index.htm;
proxy_pass http://cluster; # 访问 http://127.0.0.1:1111时,通过cluster分流。
}
- 通过制定文件启动Nginx。./nginx -c /etc/nginx/conf/nginx.conf。