先说下为什么要从Consul 换到Nacos?
当然最主要的原因是需要使用Nacos的配置和管理微服务的能力,配置中心之前用过携程开源的Apollo,个人感觉环境搭建起来比较复杂。
下面开始:
具体可以看下 https://nacos.io/zh-cn/docs/quick-start.html这个是Nacos的官方文档网址,里面有Nacos功能的详细介绍和集成教程。
一、首先我们需要搭建Nacos环境
- 这里直接下载Nacos的releases服务版本
https://github.com/alibaba/nacos/releases
这里下载的是nacos-server-1.3.0.zip 版本 -
解压缩完可以看到启动脚本,我用的是Windows,所以直接双击startup.cmd 就可以运行Nacos
这个版本默认启动是standalone 单机启动模式,如果不是默认standalone 可以使用下面命令行方法启动:
startup.cmd -m standalone 单机启动模式 - 启动完成后可以浏览器打开 http://localhost:8848/nacos/index.html 查看是否启动成功,Nacos默认登录账号和密码是 nacos / nacos
这里只是简单搭建方法,正式环境可以加入mysql和集群等配置。
二、接下来看看怎么替换掉Consul
- 先删除之前项目中Consul相关jar包的引用
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
- 添加Nacos相关jar包,需要根据自己项目所使用的框架版本添加(这边是SpringBoot版本是2.1.0.RELEASE,SpringCloud版本是Greenwich.RELEASE)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.2.RELEASE</version>
</dependency>
3.修改项目原来的配置文件 ,将原来的application.yml 改成 bootstrap.yml配置内容大致如下
server:
port: 9097
tomcat:
max-threads: 10
spring:
main:
allow-bean-definition-overriding: true
application:
#应用名称
name: nacos-project
#环境 dev|test|prod
#(nacos 会去找 ${prefix}-${spring.profiles.active}.${file-extension} 的配置文件)
#所以这个必须要配的,不然可能报错
profiles:
active: dev
cloud:
nacos:
discovery:
metadata:
management:
context-path: ${server.servlet.context-path}/actuator
server-addr: ${nacos-host:127.0.0.1}:${nacos-port:8848}
#nacos的命名空间ID,默认是public
namespace: ${nacos-namespace:}
config:
server-addr: ${spring.cloud.nacos.discovery.server-addr}
namespace: ${spring.cloud.nacos.discovery.namespace}
# 组名也需要加上
group: PLATFORM_GROUP
#配置文件类型,目前只支持 properties 和 yaml 类型
file-extension: yaml
#指定共享配置,且支持动态刷新
extension-configs:
- data-id: datasource.yaml
group: ${spring.cloud.nacos.config.group}
refresh: true
- data-id: common.yaml
group: ${spring.cloud.nacos.config.group}
refresh: true
注:
- extension-configs 这个如果是单应用可以不需要,直接在Nacos后台添加nacos-project.yaml文件就可以了;
- 这里可以看出来我是把数据库配置和公用的一些配置分别提取成datasource.yaml 与 common.yaml 了
- 注意在Nacos后台添加配置时Group一定要和上面配置的group对应上(如上面配置的PLATFORM_GROUP)
下面给出参考内容
datasource.yaml 内容如下
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/nocas
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
initialSize: 50
minIdle: 20
maxActive: 200
maxWait: 15000
timeBetweenEvictionRunsMillis: 30000
minEvictableIdleTimeMillis: 30000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 2000
filters: stat,wall,log4j
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
useGlobalDataSourceStat: true
redis:
#数据库索引
database: 0
host: 127.0.0.1
port: 6379
password: 123456
#连接超时时间
timeout: 50000
jedis:
pool:
max-active: 100
max-idle: 50
min-idle: 10
max-wait: 10000
common.yaml 内容如下
# 日志配置
logging:
config: classpath:logback.xml
# 请求超时时间
ribbon:
ReadTimeout: 300000
ConnectTimeout: 300000
三、代码的修改
- Nacos 代码基本上没有侵入性,如果之前使用@Value的地方如果需要动态刷新的话,就只需要在类上添加 @RefreshScope注解就OK了。
这个配置${nacos-host:127.0.0.1}中,nacos-host是本地的host中配置的,可以将主机名映射到相应的 IP 地址。
我们可以打开C:\Windows\System32\drivers\etc目录下的hosts文件,在里面添加一行 127.0.0.1 nacos-host。
在yml中也可以获取系统的环境变量,这个可以自行搜索一下。
到这里改造就基本完成了,如有问题可以在评论区讨论。