前言

原先项目是以SpringConfig作为项目配置中心组件,Eureka作为服务注册发现组件,基本上就是SpringCloud全家桶,Eureka已经停更,所以前期调研可替换方案,主流替换方案有Consul/ZooKeeper/Nacos/Etcd等,网上资料也比较多,再加上之前有个项目用过Nacos商用产品,那就先试试Nacos,不得不说妙哉妙哉!!!

项目版本

spring-boot.version:2.2.5.RELEASE

spring-cloud.version:Hoxton.SR3

nacos.version:1.3.2

项目说明

项目模块说明如下,目的是把红框中的配置和服务注册发现组件替换成Nacos。示例项目中通过网关转发请求支付模块对外接口,在该接口中又涉及到用户模块服务的调用,从而验证配置是否正确。

启动Nacos

1.下载Nacos服务

https://github.com/alibaba/nacos/releases/download/1.3.2/nacos-server-1.3.2.zip

如嫌下载慢,可关注本文下方微信公众号二维码,关注后回复“666”即可获取开发常用工具包

2.解压至本地目录后,进入bin目录执行startup.cmd脚本即可,启动成功后如下图,Linux环境下操作类似不做展开说明

启动成功后通过浏览器访问如下地址

http://localhost:8848/nacos

默认用户/密码:nacos/nacos

注意事项

Nacos1.3.2版本默认启动模式是集群模式,本地测试需调整为单机模式,编辑startup.cmd文件将MODE值由“cluster”调整为“standalone”

set MODE="standalone"

项目调整

只涉及调整点说明,主要是将SpringCloud及Eureka相关依赖、配置调整成Nacos的就可以了,其余都不需要改动,非常nice。完整项目代码请查看本文下方源码链接

spring-cloud-gateway

pom.xml

<!--eureka服务注册-->
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<!--</dependency>-->
<!-- nacos 注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>

bootstrap.yml

server:
port: 9005
spring:
application:
name: springcloud-gateway-service
security:
user:
name: test
password: 123456
cloud:
gateway:
enabled: true #开启网关
discovery:
locator:
enabled: true #开启自动路由,以服务id建立路由,服务id默认大写
lower-case-service-id: true #服务id设置为小写
# eureka:
# client:
# service-url:
# defaultZone: http://localhost:9003/eureka/
# instance:
# prefer-ip-address: true
# instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
nacos:
discovery:
server-addr: 127.0.0.1:8848

pay-service

pom.xml

<!--eureka客户端-->
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<!--</dependency>-->
<!--config客户端-->
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-starter-config</artifactId>-->
<!--</dependency>-->
<!-- nacos 配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<!-- nacos 注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>

bootstrap.properties

# 服务端口
server.port=9011
# 服务应用名称
spring.application.name=pay-service # 应用服务名称
#spring.cloud.config.name=pay-service
# 对应git上分支名称
#spring.cloud.config.label=master
# 对应配置文件上profiles参数项
#spring.cloud.config.profile=dev
# 开启服务发现
#spring.cloud.config.discovery.enabled=true
# 配置Config服务应用名称
#spring.cloud.config.discovery.service-id=config-server # eureka服务端地址
#eureka.client.serviceUrl.defaultZone=http://localhost:9003/eureka/
#eureka.instance.prefer-ip-address=true
#eureka.instance.instance-id=${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} # nacos配置中心
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.file-extension=properties

application.properties

# nacos服务发现
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

user-service

pom.xml

<!--eureka客户端-->
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<!--</dependency>-->
<!--config客户端-->
<!--<dependency>-->
<!--<groupId>org.springframework.cloud</groupId>-->
<!--<artifactId>spring-cloud-starter-config</artifactId>-->
<!--</dependency>--> <!-- nacos 配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<!-- nacos 注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>

bootstrap.properties

# 应用服务名称
#spring.cloud.config.name=user-service
# 对应git上分支名称
#spring.cloud.config.label=master
# 对应配置文件上profiles参数项
#spring.cloud.config.profile=dev
# 开启服务发现
#spring.cloud.config.discovery.enabled=true
# 配置Config服务应用名称
#spring.cloud.config.discovery.service-id=config-server # eureka服务端地址
#eureka.client.serviceUrl.defaultZone=http://localhost:9003/eureka/
#eureka.instance.prefer-ip-address=true
#eureka.instance.instance-id=${spring.cloud.client.ip-address}:${spring.application.name}:${server.port} # nacos配置中心
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.file-extension=properties

application.properties

# nacos服务发现
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

Nacos控制台

启动各个服务后,就大功告成啦,接下来让我们看下Nacos控制台吧

在服务管理中我们可以看到已经注册进来的服务,服务间就可以互相调用啦,如下图

看到这里好像配置中心没啥体现,接下来就说说,当前项目中仅仅只有user-service模块使用到配置中心,针对数据库的配置信息使用了,如下

spring.datasource.name=${user-service.datasource.name}
spring.datasource.type=${user-service.datasource.type}
spring.datasource.url=${user-service.datasource.url}
spring.datasource.username=${user-service.datasource.username}
spring.datasource.password=${user-service.datasource.password}
spring.datasource.driver-class-name=${user-service.datasource.driver-class-name}

那具体要怎么配置呢,接着往下看

Data ID:user-service.properties(下面会进行解释)

Group:DEFAULT_GROUP

配置格式选择Properties

配置内容:

user-service.datasource.name=user-service-datasource
user-service.datasource.type=com.alibaba.druid.pool.DruidDataSource
user-service.datasource.url=jdbc:mysql://127.0.0.1:3306/spring-cloud?useUnicode=true&amp;characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull&amp;transformedBitIsBoolean=true&amp;useSSL=false&amp;allowMultiQueries=true&amp;autoReconnect=true
user-service.datasource.username=root
user-service.datasource.password=root
user-service.datasource.driver-class-name=com.mysql.jdbc.Driver

重点说下Data ID,在 Nacos Spring Cloud 其完整的格式如下

${prefix}-${spring.profile.active}.${file-extension}

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

spring.profile.active 即为当前环境对应的 profile。

注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成如下

${prefix}.${file-extension}

file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。

了解了dataId的格式,那自然也明白了上述配置项中为什么用user-service.properties命名,添加完该配置项后,我们来请求下接口,请求接口地址如下

直接请求支付模块接口地址

http://localhost:9011/pay/get

经网关转发后接口地址

http://localhost:9005/pay-service/pay/get

最终都会得到如下响应数据



通过访问以下接口获取配置项数据库连接地址

http://localhost:9005/user-service/user/getDatasourceUrl

至此Nacos已全面替换Eureka和Config。中途有个插曲,替换成Nacos后,网关自动路由居然失效了,一直提示404,反复折腾来折腾去的,最终在Nacos Github上看到一个Issues

https://github.com/alibaba/nacos/issues/2302



于是马上调整至如下版本进行尝试,重新编译后请求访问,一切都是那么的熟悉,这感觉真好

spring-boot.version:2.1.16.RELEASE
spring-cloud.version:Greenwich.SR3

测试成功后,看了下spring-cloud-alibaba v2.2.1.RELEASE已经发布了,那岂不是解决这个问题了,试一试不就知道了,于是又把Spring boot,Spring cloud版本切换至本文最初的配置,另外将nacos版本升级至2.2.1版本,重新编译运行,请求一切正常。

<!-- nacos 配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<!-- nacos 注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>

参考资料

Nacos官网

Nacos Github

系列文章

SpringCloud系列之配置中心(Config)使用说明

SpringCloud系列之服务注册发现(Eureka)应用篇

SpringCloud系列之网关(Gateway)应用篇

SpringCloud系列之集成Dubbo应用篇

SpringCloud系列之集成分布式事务Seata应用篇

项目源码

SpringCloud系列之Nacos应用篇的更多相关文章

  1. SpringCloud系列之Nacos+Dubbo应用篇

    目录 前言 项目版本 项目说明 项目结构 集成Dubbo2.6.x 支付模块 用户模块 集成Dubbo2.7.x 支付模块 用户模块 测试验证 参考资料 系列文章 前言 本文在前篇文章<Spri ...

  2. SpringCloud系列之Nacos+Dubbo+Seata应用篇

    目录 前言 项目版本 项目说明 Nacos服务 Seata服务 订单模块 支付模块 参考资料 系列文章 前言 本文接上篇文章<SpringCloud系列之Nacos+Dubbo应用篇>继续 ...

  3. SpringCloud系列之网关(Gateway)应用篇

    @ 目录 前言 项目版本 网关访问 鉴权配置 限流配置 前言 由于项目采用了微服务架构,业务功能都在相应各自的模块中,每个业务模块都是以独立的项目运行着,对外提供各自的服务接口,如没有类似网关之类组件 ...

  4. SpringCloud系列之集成Dubbo应用篇

    目录 前言 项目版本 项目说明 集成Dubbo 2.6.x 新项目模块 老项目模块 集成Dubbo 2.7.x 新项目模块 老项目模块 参考资料 系列文章 前言 SpringCloud系列开篇文章就说 ...

  5. SpringCloud系列之集成分布式事务Seata应用篇

    目录 前言 项目版本 项目说明 Seata服务端部署 Seata客户端集成 cloud-web module-order module-cart module-goods module-wallet ...

  6. SpringCloud系列——Bus 消息总线

    前言 SpringCloud Bus使用轻量级消息代理将分布式系统的节点连接起来.然后可以使用此代理广播状态更改(例如配置更改)或其他管理指令.本文结合RabbitMQ+GitHub的Webhook实 ...

  7. Nacos系列:Nacos的三种部署模式

    三种部署模式 Nacos支持三种部署模式 1.单机模式:可用于测试和单机使用,生产环境切忌使用单机模式(满足不了高可用) 2.集群模式:可用于生产环境,确保高可用 3.多集群模式:可用于多数据中心场景 ...

  8. SpringCloud系列之分布式配置中心极速入门与实践

    SpringCloud系列之分布式配置中心极速入门与实践 @ 目录 1.分布式配置中心简介 2.什么是SpringCloud Config? 3.例子实验环境准备 4.Config Server代码实 ...

  9. JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐(二)

    前言:上篇 JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐 分享了几个项目中比较常用的组件,引起了许多园友的关注.这篇还是继续,因为博主觉得还有几个非常简单.实用的组件,实在不愿自己 ...

随机推荐

  1. Python编程第四版中文 上下册完整版pdf|网盘下载附提取码

    点击此处下载 提取码:drjh 作者简介 Mark Lutz是Python培训的世界的领先者,他是最初和最畅销的Python著作的作者,从1992年起就是Python社区的先锋人物.Mark有25年的 ...

  2. Springboot开发web项目

    当前,Spring毫无疑问已经成为java后台对象管理标准框架,除了通过IOC能够管理我们的自定义对象的生命周期之外还提供了众多功能繁复的可配置功能模块.但同时带来了复杂的配置项,这对初学者而言简直是 ...

  3. zabbix监控配置一般流程

    目录 zabbix监控配置流程 1. 配置客户端 2. 配置监控 2.1 创建主机组 2.2 添加主机并加入主机组 2.3 添加监控项 2.3.1 模板的方式(不用添加触发器) 2.3.2 手动添加的 ...

  4. ubuntu16.04下chrome安装flash插件

    最近自己的ubuntu安装了最新的chrome54版本,发现视频无法播放,提示flash版本过期,原来最新的chrome已经不内置flash插件了,需要自己安装. 方法/步骤 1.安装chrome打开 ...

  5. 安装Hive 使用beeline 链接 出现 User: AAA is not allowed to impersonate BBB

    AAA 指的是 hdfs 文件系统的用户 BBB 是hive 设置的 hiveserver2 配置文件中的登陆用户名 在hadoop 配置如下 <property> <name> ...

  6. 2020牛客暑期多校训练营(第八场)K-Kabaleo Lite题解

    K-Kabaleo Lite 题目大意: 给出每种菜品的利润以及碟数,要求我们给每个客人至少一碟菜,要求从1号菜品开始给,给的菜品的号码是连续的,每个客人同号码的菜都只能给一碟.求能招待客人的最大数量 ...

  7. 2020 Multi-University Training Contest 1 部分题解

    目录 Cookies Distinct Sub-palindromes Fibonacci Sum Finding a MEX Leading Robots Math is Simple Minimu ...

  8. java循环嵌套与跳转语句(break,continue)

    一 循环嵌套 嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构.while.do…while. for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套f ...

  9. 编写高质量代码的30条黄金守则-Day 01(首选隐式类型转换)

    编写高质量代码的30条黄金守则-Day 01(首选隐式类型转换),本文由比特飞原创发布,转载务必在文章开头附带链接:https://www.byteflying.com/archives/6455 该 ...

  10. 从一次外卖到对oauth2.0的思考

    别问oauth1.0哪去了,问就是不好讲. 1. 外卖并不好吃   今天下班得早,想吃顿好的,于是就点了一份外卖,过了一会儿,外卖到了,但是在小区大门被堵住了,我亲自远程开门后才能进来,又过了一会,被 ...