注册中心
随着单体应用拆分,面临的第一份挑战就是服务实例的数量较多,并且服务自身对外暴露的访问地址也具有动态性。可能因为服务扩容、服务的失败和更新等因素,导致服务实例的运行时状态经常变化。此时就需要一个集中的管理对象,就是注册中心。
注册中心能实现自动注册各个服务的实例,一旦实例上线,就会被自动注册到注册中心,一旦实例下线,就会被自动从注册中心剔除。当某个实例注册到注册中心后,该实例需要定期向注册中心发送心跳,如果在一定时间内没有发送心跳,那么该实例就会从注册中心中移除。当注册中心检测到某个服务的实例发生了变化,那么,注册中心会自动把最新的变更推送给该服务的消费者。
对于一个服务来讲,该服务的提供者和消费者都需要注册到注册中心。消费者需要从注册中心拉取服务的实例,然后使用负载均衡算法选择一个实例进行调用。
常见的注册中心有 Eureka、Consul、Nacos、Zookeeper,前三者属于 Spring Cloud 体系,最后一个属于 Dubbo 类体系。两种体系代表两种注册中心实现方案,虽然是不同的方案,但是最终实现的效果相同。不管使用哪种注册中心,他们都遵循了 Spring Cloud 的标准,所以,在使用层面上,他们的差别并不大。这里,我们使用 Nacos 作为注册中心。
Nacos
Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。
部署
参考
本质上来讲,Nacos 本身也是一个服务。所以,我们需要先部署 Nacos。本次使用 2.5.x 的单机部署。参考下面的步骤。
1. 下载安装包

2. 初始化 SQL 脚本


在解压后的 ZIP 文件中也能找到初始化的 SQL,如下:

3. 修改 Nacos 配置
解压步骤 1 下载的压缩包,然后修改 conf/application.properties 中的配置,如下:
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
spring.datasource.platform=mysql
spring.sql.init.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql:///nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=123456
4. 启动 Nacos
进入解压后的 bin 目录,执行下面的命令(需要提前配置 JAVA_HOME):
startup.cmd -m standalone
5. 访问 Nacos 控制台
在浏览器中访问 localhost:8848/nacos,如下:

注意
自 2.4.0 版本开始,Nacos 构建时不再提供管理员用户 nacos 的默认密码,需要在首次开启鉴权后,通过 API 或 Nacos 控制台进行管理员用户 nacos 的密码初始化。
服务注册
添加依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- 可以去掉版本号,因为项目中引入了 spring-cloud-alibaba-dependencies 来自动管理版本 -->
<!-- <version>2023.0.3.2</version> -->
</dependency>
- application.yml
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
# 没有密码的话,可以不用配置
username:
password:
启动服务后,查看 Nacos 的服务列表:
