SpringCloud - Nacos 服务注册中心
Nacos从入门到避坑
1.学习借鉴
1.2 Nacos使用入门
1.3 nacos介绍及使用
1.5 Ribbon和OpenFeign openFeign/ restTemplate+ribbon
1.6 Ribbon与OpenFeign
2.Nacos简介
2.1 为什么叫Nacos
前四个字母分别为name和config的前两个字母,最后的s为Service
2.2 主要功能 配置中心 + 注册中心
3.1 Alibaba 2.2.0.RELEASE 版本对应的 nacos 1.1.4
docker pull nacos/nacos-server:1.1.4
3.2 执行命令
# 创建文件夹 mkdir -p /usr/local/nacos/logs/ mkdir -p /usr/local/nacos/init.d/ # 运行nacos
docker run --name nacos1.1.4 -d -p 8848:8848 --privileged=true --restart=always -e JVM_XMS=256m -e JVM_XMX=256m -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /usr/local/nacos/logs:/home/nacos/logs -v /usr/local/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties nacos/nacos-server:1.1.4
-v /usr/local/nacos/conf:/home/nacos/conf
--name 容器名称 ;-p 宿主主机端口:容器端口 映射; -e 环境变量配置; -v 路径映射 ;–restart 重启策略
注意::需要经conf文件映射到宿主机 ,后边mysql持久化需要用到sql脚本,application。properties (挂载conf 路径nacos起不来)
3.3 初始密码 nacos/nacos
http://IP:8848/nacos/index.html
3.3 创建mysql 并持久化nacos的配置信息 持久化没有启动成功!存在问题
# mysql新建nacos的数据库,并执行脚本 sql脚本地址如下:
https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql
# 修改配置文件
vim /usr/local/nacos/init.d/custom.properties
server.contextPath=/nacos server.servlet.contextPath=/nacos server.port=8848 spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://ip:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=tsbx8888 nacos.cmdb.dumpTaskInterval=3600 nacos.cmdb.eventTaskInterval=10 nacos.cmdb.labelTaskInterval=300 nacos.cmdb.loadDataAtStart=false management.metrics.export.elastic.enabled=false management.metrics.export.influx.enabled=false server.tomcat.accesslog.enabled=true server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/** nacos.naming.distro.taskDispatchThreadCount=1 nacos.naming.distro.taskDispatchPeriod=200 nacos.naming.distro.batchSyncKeyCount=1000 nacos.naming.distro.initDataRatio=0.9 nacos.naming.distro.syncRetryDelay=5000 nacos.naming.data.warmup=true nacos.naming.expireInstance=true
# docker cp 复制:
docker cp 8b9d:/home/nacos/init.d/custom.properties /usr/local/nacos/init.d/custom.properties
# 重启容器
dockers restart 容器id
4.服务注册到 nacos
4.1 父工程引入依赖并指定版本;子模版引入依赖不需要指定版本
<!--spring cloud alibaba 2.1.0.RELEASE-->
<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>
4.2 子模块引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
4.3 yml文件
spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848 #配置Nacos地址
4.4 主启动类添加注解 @EnableDiscoveryClient
@EnableDiscoveryClient @SpringBootApplication public class PaymentMain8001 { public static void main(String[] args) { SpringApplication.run(PaymentMain9001.class,args); } }
4.4 通过idea 工具 参照8001 新建8002 直接拷贝虚拟端口映射
2021 idea 设置多启动类管理 (2019版 的 Run Dashboard) add -- springboot
如
-DServer.port=8002
4.5 为什么nacos 支持负载均衡
5.服务之间的调用
1. RestTemplate 服务接口调用
+Ribbon实现负载均衡
2.OpenFeign服务接口调用
- openFeign 内置了 ribbon 实现负载均衡
- Nacos 内置了 ribbon可以实现负载均衡
- Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用。
6.引入 spring-cloud-starter-alibaba-nacos-discovery 警告
No URLs will be polled as dynamic configuration sources.
产生原因:分析可知道由于Nacos/openFeign包内Ribben引入了netflix-archaius包,默认需要加载配置源,无法加载配置元导致系统警告。 netflix-archaius与spring-config和apollo等配置组建类似。
openFeign、Nacos 都内置了Ribben ;
解决方案:1. maven依赖中 排除netflix-archaius引入
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <exclusions> <exclusion> <artifactId>spring-cloud-netflix-archaius</artifactId> <groupId>org.springframework.cloud</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <exclusions> <exclusion> <artifactId>spring-cloud-netflix-archaius</artifactId> <groupId>org.springframework.cloud</groupId> </exclusion> </exclusions> </dependency>
方案2:
在resources目录下创建一个空的config.properties文件。
7. Endpoint ID 'nacos-discovery' contains invalid characters, please migrate to a valid format.
端点 ID 'nacos-discovery' 包含无效字符,请迁移到有效格式。
根据报错信息找到源代码,发现-和. 都会包这个问题;忽略