1.什么是nacos?
官方简介:一个更易于构建云原生应用的动态服务发现(nacos discovery )、服务配置(nacos config)和服务管理平台。
nacos的关键特性包括:
- 服务发现和服务健康监测
- 动态配置服务
- 动态dns服务
- 服务及其元数据管理
nacos的核心功能:
服务注册:nacos client会通过发送rest请求的方式向nacos server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。nacos server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存map中。服务心跳:在服务注册后,nacos client会维护一个定时心跳来持续通知nacos server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳。服务同步:nacos server集群之间会互相同步服务实例,用来保证服务信息的一致性。服务发现:服务消费者(nacos client)在调用服务提供者的服务时,会发送一个rest请求给nacos server,获取上面注册的服务清单,并且缓存在nacos client本地,同时会在nacos client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存。服务健康检查:nacos server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)。
2.nacos server 单机部署配置
2.1. 相关文件
- 安装包下载地址:https://github.com/alibaba/nacos/releases
- 官方文档: https://nacos.io/zh-cn/docs/deployment.html
- 版本关系说明: https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
2.2. 配置流程
- 修改bin/startup.cmd文件信息,默认是
集群模式,需修改为单机模式

- 启动成功页面

- 登录页面(默认用户名,密码:nacos)

- 可选操作:端口修改,数据源设置—>config/application.properties文件

- sql文件位置

2.3. 搭建nacos-client 服务
(1)引入依赖
父pom中支持spring cloud&spring cloud alibaba, 引入依赖
<!--项目依赖管理,父项目只是声明依赖,子项目需要写明需要的依赖(可以省略版本信息)-->
<dependencymanagement>
<dependencies>
<!--spring cloud alibaba 版本管理器-->
<dependency>
<groupid>com.alibaba.cloud</groupid>
<artifactid>spring-cloud-alibaba-dependencies</artifactid>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud 版本管理器-->
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-dependencies</artifactid>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--springboot 版本管理器-->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-parent</artifactid>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencymanagement>
子pom中引入依赖
<!--nacos 服务注册与发现-->
<dependency>
<groupid>com.alibaba.cloud</groupid>
<artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid>
</dependency>
<!--负载均衡器-->
<dependency>
<groupid>org.springframework.cloud</groupid>
<artifactid>spring-cloud-starter-loadbalancer</artifactid>
<version>3.1.1</version>
</dependency>
(2) application.yml中配置
server:
port: 8020
# 应用名称 (nacos会将该名称当做服务名称)
spring:
application:
name: order-service
cloud:
nacos:
server-addr: 172.16.10.132:8848 # 服务地址
discovery:
username: nacos
password: nacos
# namespace: public
# ephemeral: false # 永久实例 哪怕宕机了也不会删除该实例?
# service: # 默认取${spring.application.name}的值,也可以通过该选项配置 服务名称
# group: #默认default_group 分组管理
更多nacos相关配置: https://github.com/alibaba/spring-cloud-alibaba/wiki/nacos-discovery
(3) 启动springboot应用,nacos管理端界面查看是否成功注册

(4)代码
@restcontroller
@requestmapping("/order")
public class ordercontroller {
@autowired
resttemplate resttemplate;
@requestmapping("/add")
public string add() {
system.out.println("下单成功");
string msg = resttemplate.getforobject("http://stock-service/stock/reduct", string.class);
return "hello world" + msg;
}
}
注意!!! 需要加上@loadbalanced
@bean
@loadbalanced
public resttemplate resttemplate(resttemplatebuilder builder){
resttemplate resttemplate = builder.build();
return resttemplate;
}
(5) 测试

3.nacos server 集群部署配置(windows环境)
3.1.环境准备
(1) jdk1.8+
(2) maven 3.3+
(3) nginx 作为负载均衡
(4) mysql
- 集群部署架构图

3.2. 配置流程
(1) 复制 nacos安装包,修改为 nacos8840、nacos8850、nacos8860

(2) 以nacos8840为例,进入nacos8840目录
(2.1) 修改conf\application.properties的配置,使用外置数据源 要使用mysql5.7+(包括)

(2.2) 将conf\cluster.conf.example复制一份,并改名为cluster.conf,添加节点配置

nacos8850,nacos8860 按同样的方式配置。
(3) 创建mysql数据库,sql文件位置:conf\nacos mysql.sql
(4)如果出现内存不足:修改启动脚本(bin\startup.sh)的jvm参数

5) 分别启动nacos8840,nacos8850,nacos8860

(6) 测试,出现以下界面,则表示nacos集群已创建成功
登录 http://172.16.10.132:8840/nacos/index.html ,用户名和密码都是nacos

(7) 使用nginx实现负载均衡

3.3. 搭建nacos-client 服务
(1) 配置同上。
(2) application.yml中配置
server:
port: 8020
# 应用名称 (nacos会将该名称当做服务名称)
spring:
application:
name: order-service
cloud:
nacos:
server-addr: 172.16.10.132:8848 # nginx 服务地址
discovery:
username: nacos
password: nacos
# namespace: public
# ephemeral: false # 永久实例 哪怕宕机了也不会删除该实例?
# service: # 默认取${spring.application.name}的值,也可以通过该选项配置 服务名称
# group: #默认default_group 分组管理
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论