文章目录
1.简介
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
2.Nacos的安装和编译
2.1 SpringCloud Alibaba 各个组件的版本关系
// 推荐使用官方推荐版本
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
2.2 下载源码
解压进入目录中进行maven编译
mvn clean install -DskipTests -Drat.skip=true -f pom.xml
注意:编译的时候如果需要你自己指定jdk版本,可以修改maven配置文件conf/settings.xml
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
2.3 单机源码启动
- 将jdk版本都设置为jdk8
- 设置单机启动参数
-Dnacos.standalone=true
这样就可以源码单机启动了。
2.4 单机服务启动
- 下载Nacos服务
- 解压进入bin目录
- 执行命令
//单机启动命令
startup.cmd -m standalone
或者可以直接修改startup.cmd,将MODE模式改为standalone,这样下次直接双击startup.cmd就可以了
3.Nacos服务领域模型
服务->集群-> 单例/实例【之所以他会这样设置就是为了大的互联网公司,多集群垮机房提供了解决方案。】
-
服务(Service):服务是指应用程序、微服务或任何可被网络访问的实体。在Nacos中,服务以服务名(Service Name)作为唯一标识符。服务名通常是一个字符串,用于区分不同的服务。
-
实例(Instance):实例是指服务的一个具体实例,即一个运行中的服务实体。实例通常由IP地址、端口号和实例ID组成。在Nacos中,每个服务可以有多个实例,每个实例都有一个唯一的实例ID。
-
Group(分组):Group是指对服务进行逻辑分组的概念。通过将服务分组,可以对不同的服务进行分类和管理。在Nacos中,可以为每个服务指定一个Group,用于区分不同的服务分组。一个服务可以属于一个或多个Group。默认值Default-Group。
-
命名空间(Namespace):命名空间是用于隔离和管理服务的逻辑空间。它可以帮助组织和管理大规模的服务集群。每个命名空间都有自己的配置信息,如服务注册表、配置项等。默认值public
-
集群(Cluster):集群是指同一个服务的一组实例的集合。在Nacos中,可以为一个服务创建多个集群,每个集群包含一组相同的服务实例。通过集群,可以实现服务的高可用和负载均衡。默认值Default
-
配置(Configuration):配置是指应用程序的参数、属性或任何需要动态调整的值。在Nacos中,可以使用配置管理功能来集中管理应用程序的配置信息,并实现动态配置的更新和推送。
-
健康检查(Health Check):健康检查是指对服务实例的健康状态进行监测和检查。Nacos提供了健康检查功能,可以定期检查服务实例的可用性,并根据检查结果进行相应的处理。
4.Nacos的使用
4.1 引入Nacos
(集成的通用思路:引入依赖->添加注解->添加配置)
- 根据官方推荐的版本引入依赖
// 推荐使用官方推荐版本
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
- 引入依赖
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
</dependencies>
</dependencyManagement>
- 添加启动注解
//启用服务注册和服务发现功能
@EnableDiscoveryClient
@SpringBootApplication
public class StockApplication {
public static void main(String[] args) {
SpringApplication.run(StockApplication.class);
}
}
- 添加配置
spring:
cloud:
nacos:
discovery:
# 设置服务名为 "msb-stock"
service: msb-stock
# 设置 Nacos 服务端地址为 localhost:8848
server-addr: localhost:8848
启动后就能在Nacos控制台上的服务列表发现该服务
4.2 Ribbon的使用
RestTemplate是Spring Web模块提供的一个基于Rest规范提供Http请求的工具。
Ribbon是springcloud中客户端负载均衡的组件。
我们在微服务架构中,往往通过RestTemplate发送RPC请求,然后通过Ribbon做客户端负载均衡。
通俗来讲如果在Nacos上注册了2个实例,通过RestTemplate此时不知道要调用哪个实例,这个时候就需要Ribbon去获取该实例列表,然后根据规则去调用(例如轮询)
- 注册RestTemplate的Bean
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
- 调用
@GetMapping("/order/create")
public String createOrder(Integer productId,Integer userId){
// 此时restTemplate并不能识别msb-stock所以他不能进行调用
// RestTempLate调用需要一个负载均衡器 1、 获取msb-stock对应服务列表 2、选择一个去调用
// RestTemplate扩展点clientHttpRequestInterceptor
// 我们有个组件ribbon 实现了这个扩展点 LoadBalancerInterceptor
// 他做的事情就是将msb-stock:替换为:localhost:11001
String result = restTemplate.getForObject("http://msb-stock/stock/reduce//" + productId, String.class);
return "下单成功";
}
5.Nacos注册中心的原理
原理
-
注册:当一个服务启动时,它会向Nacos注册中心发送注册请求,包含服务的元数据信息,例如服务名、实例ID、IP地址、端口号等。Nacos将这些信息存储在自己的注册表中。
-
健康检查:Nacos会周期性地向已注册的服务实例发送健康检查请求,以确定实例是否处于可用状态。如果某个实例无法响应健康检查请求或达到一定的不可用阈值,Nacos会将其标记为不可用。
(心跳机制:通过每5秒检查一下心跳信息来判断是否超时就是用当前时问喊去上次一心跳的时间,如果超过15秒则将节点设置为非健康状态并进行广播。如果超过30秒则将节点进行移除,说明节点不可用) -
发现:当一个服务需要调用其他服务时,它可以向Nacos注册中心发送服务发现请求,请求特定服务名的所有可用实例列表。Nacos根据注册表中存储的信息,返回满足条件的服务实例信息给调用方。(每10秒定时拉去服务列表)
-
更新:当服务实例的状态或信息发生变化时,例如实例上线、下线、IP地址或端口号变更等,服务实例会向Nacos注册中心发送更新请求,通知Nacos进行相应的变更。
-
负载均衡:Nacos可以与负载均衡器(例如Ribbon)集成,以实现在服务调用时的负载均衡。通过服务注册中心提供的实例列表,负载均衡器可以选择一个可用的实例来处理请求,从而实现请求的分发和负载均衡。
6.搭建集群
6.1 解压Nacos
解压Nacos,复制三份
6.2 配置数据库
具体位置在nacos目录下的conf中,这里的操作和之前是一样的,我们可以直接打开这个文件然后拷贝到数据库中执行,当然也是要创建数据库使用数据库然后在复制脚本内容,执行即可。
6.3 修改application.properties配置文件
修改每个服务数据库链接
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC
db.user=root
db.password=123456
修改每个服务端口
6.4 修改集群配置文件
将cluster.conf.example 改为 cluster.conf,并添加对应服务集群Ip:port,其他文件夹都要改
6.5 集群启动
D:\toolsDev\springalibaba\nacos cluster\nacos-8848\bin\startup.cmd -m cluster
D:\toolsDev\springalibaba\nacos cluster\nacos-8868\bin\startup.cmd -m cluster
D:\toolsDev\springalibaba\nacos cluster\nacos-8888\bin\startup.cmd -m cluster
6.5 安装Nginx,负载均衡访问Nacos
修改nginx.conf
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream nacos {
server 192.168.26.40:8848;
server 192.168.26.40:8868;
server 192.168.26.40:8888;
}
server {
listen 81;
server_name localhost;
location / {
proxy_pass http://nacos;
}
}
}
启动Nginx
start nginx.exe
6.6 修改项目配置
6.7 访问Nacos
访问Nginx监听的81端口,会自动负载均衡访问三个Nacos
集群环境搭建完毕!