分布式微服务 - 2.服务注册 - 5.Nacos
项目示例:
- 项目示例 - 2.服务注册 - 4.Nacos
内容提要:
- 下载启动
- 基本使用、隔离管理
- Nacos集群:持久化配置、集群配置
- 服务提供者集群
文档:
下载启动
- 官网下载Nacos并解压
- 解压后的文件夹中打开bin目录,并在此目录下打开命令行窗口,并输入
startup.cmd -m standalone
命令启动(Windows系统环境下的单机模式运行,非集群模式) - 浏览器中输入
localhost:8848/nacos
打开nacos首页
基本使用
- 引入依赖(注意:此依赖仅用于nacos的服务注册功能,与之后nacos的服务配置功能使用的依赖不同)
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 在application.yml中做如下配置
spring:
application:
name: # 服务注册时使用的别名
cloud:
nacos:
discovery:
server-addr: # nacos的地址
隔离管理
nacos提供命名空间namespace/组别group/服务名
三层级来对注册的服务进行隔离管理。一般下,命名空间namespace用于区分开发、测试等环境。注意,不同命名空间namespace或组别group时,相同别名注册的微服务不能形成集群,且服务调用时默认不能跨命名空间或组别进行调用。
命名空间namespace
- 在nacos首页中的命名空间一页中,新建一个命名空间
- 在微服务的application.yml中对nacos进行配置时,使用spring.cloud.nacos.discovery.namespace属性配置,属性值为nacos首页上新建的命名空间的ID(命名空间不配置时,默认是public)
组别group
在微服务的application.yml中对nacos进行配置时,使用spring.cloud.nacos.discovery.group属性配置,属性值为任意(一般是约定好的组别名)(组别不配置时,默认是DEFAULT_GROUP)。
集群使用
nacos集群
nacos默认使用内置的derby数据库存储信息,但配置nacos集群时会因此造成多个nacos信息不一致的情况,因此nacos集群需要配置外部数据库(即进行持久化配置)。
持久化配置
nacos目前仅支持MySQL数据库。进行持久化配置之后,不仅可以解决nacos集群数据不一致问题,在重启nacos之后,数据不会再丢失。
配置步骤:
- 在nacos安装目录中下的conf目录下找到mysql-schema.sql文件,在mysql中新建一个数据库,并执行文件的sql语句创建表
- 在nacos的conf目录下修改application.properties文件,按照创建的库表为其添加以下内容,重启nacos
spring.datasource.platform=mysql
db.num=#数据库数量
db.url.0=jdbc:mysql://#ip地址和端口号/#数据库名?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=#数据库用户名
db.password=#数据库密码
集群配置
nacos配置集群时,必须至少要三个及以上。配置好nacos集群后,微服务注册时可以随便选择一个节点的ip及端口进行注册,所有nacos节点间会自动进行同步。但是,一般在nacos集群之前配置一个nginx,nginx依照自身的负载均衡选择nacos节点进行转发,不仅可以统一服务注册时的ip地址和端口号,而且可以在服务调用时通过nginx实现对nacos集群的负载均衡。
配置步骤:
- nacos下载解压后,完成持久化配置
- 在nacos的conf目录下复制cluster.conf.example文件并重命名为cluster.conf
- 清空cluster.conf文件的内容,并添加每个nacos集群节点的ip地址和端口号,如
192.168.237.1:8848
(注意:ip地址不能是localhost或者127.0.0.1,必须是实际的ip地址) - 复制nacos若干份(每一份就是nacos集群中的一个节点),在每一份nacos文件的conf目录下,修改application.properties文件中的server.port为每个节点的端口号
- 依次在每个nacos的bin目录中打开命令行窗口,输入
startup.cmd
命令启动
服务提供者集群
若干个微服务注册时,只要使用相同的别名进行注册,即可形成服务提供者集群。但是一般来说,集群是用一个微服务仅以不同的端口启动若干个实例形成,因为假设一个API仅在集群的部分节点中拥有,其他节点没有该API,则服务调用负载均衡到没有API的节点时,会报错异常。