Nacos官方文档
网上看到的工作原理图
1.根据官网给到的信息创建SpringCloudAlibaba项目(官网文档)
这里直接看官方给的文档选择相对应的版本就可以了,选择版本
2.2.6.RELEASE
2.下载对应的Nacos版本
这里看在Windows还是Linux环境下用就下载对应的压缩包即可
2.1 配置并启动Nacos,登录Nacos管理平台
Nacos启动文件,默认为集群模式,学习修改为单机模式
application.properties配置文件中可以看到存储也有两种模式–存内存/DB
学习中单机存内存即可,集群可上DB
启动可以看到上面已经打印了访问地址
默认账号密码:nacos/nacos
3.注册服务到Nacos
# 基础配置
server:
port: 18004
spring:
application:
name: nacos-config
cloud:
nacos:
config:
username: nacos
password: nacos
context-path: /nacos
server-addr: http://127.0.0.1:30048
namespace: public
discovery:
username: nacos
password: nacos
server-addr: http://127.0.0.1:30048
namespace: public
config:
import: nacos:nacos-config-example.yaml?refresh=true
启动类加上注解:
@EnableDiscoveryClient
4. Nacos集群
本地虚拟机搭建伪集群,单台虚拟机多个Nacos
4.1修改配置文件
修改
application.properties
文件,打开DB连接
复制
cluster.conf.example
为cluster.conf
并修改集群IP端口
启动,根据提示查看启动日志,成功后即可访问
集群搭建:按照如上方法一一操作
成功启动三个Nacos 48,49,50
4.2 利用nginx进行反向代理与负载均衡
# nginx代理nacos集群
upstream cluster {
server 127.0.0.1:8848;
server 127.0.0.1:8849;
server 127.0.0.1:8850;
}
server {
listen 80;
server_name localhost;
location /nacos/ {
proxy_pass http://cluster/nacos/;
}
}
通过nginx反向代理访问到Nacos
5.可能会出现的问题
- failed to req API:/nacos/v1/ns/instance after all servers([192.168.229.128:8848])
我这里是服务名称的问题,从order-service改成order_service就没有问题了,但是另外一个服务改成stock_service还是不行。最后改成了stock才可以,暂时没查到是为什么
6. Nacos Config 文档
6.1 新建nacos-config项目,如上。只需要按照文档配置即可
6.2 接口动态感知配置文件修改
@Value需要搭配
@RefreshScope
,否则无法获取到修改后的值
@RequestMapping("/test")
@RefreshScope
public class TestController {
@Value("${user.name}")
private String name;
}
6.3 碰到的问题
- 读取不到配置文件信息:大概率是因为配置文件中的name跟DataID不对应
- 默认读取配置文件的格式是
properties格式
,使用其他格式需要在file-extension
指定格式读取
Add a spring.config.import=nacos: property to your configuration. If configuration is not required add spring.config.import=optional:nacos: instead. To disable this check, set spring.cloud.nacos.config.import-check.enabled=false.
/**
* 产生问题的原因是bootstrap.properties比application.properties的优先级要高
* 由于bootstrap.properties是系统级的资源配置文件,是用在程序引导执行时更加早期配置信息读取;
* 而application.properties是用户级的资源配置文件,是用来后续的一些配置所需要的公共参数。
* 但是在SpringCloud 2020.* 版本把bootstrap禁用了,导致在读取文件的时候读取不到而报错,所以我们只要把bootstrap重新导入进来就* 会生效了。
**/
# 开启Spring Cloud 应用程序启动时加载bootstrap配置文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>