文章目录
- 1. 安装Nacos
- 2. 注册Nacos
- 3. 注册集群
- 3.1 服务器集群
- 3.2 负载均衡策略设置
- 4. 权重设置
- 5. 环境隔离
- 6. 临时实例
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
1. 安装Nacos
nacos的下载包可以在这里获取(提取码:1234),下载后直接解压即可。
如果要运行Nacos,只需要将cmd的目录切岛Nacos的bin目录下,在命令行中输入 startup.cmd -m standalone
即可,然后进入网页 http://127.0.0.1:8848/nacos/#/login,网页如下:
初始账号密码都是 nacos
,即可登录。
2. 注册Nacos
接下来我们就尝试将User和Order两个服务注册到Nacos中。
首先,将两个服务中的Eureka的依赖和配置文件中的配置进行注释,然后在父工程的pom文件中添加SpringCloudAlibaba的依赖管理,父工程的pom文件如下
然后在其中添加依赖管理,如下
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
之后在Order和User的服务中导入依赖如下
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
并在application.yml 配置文件中进行如下配置
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
最后启动服务,打开并登陆Nacos可看到下面的画面:
上述代表我们注册成功。
3. 注册集群
3.1 服务器集群
服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。
比如User这个服务我们可以有多个集群来进行实现,将User编入集群的操作仅需要在配置文件中添加如下配置
spring:
cloud:
nacos:
discovery:
cluster-name: HZ # 集群名称
重新启动后可以发现,集群名称已经由默认改为了 “HZ”。
可以再次Copy一个User服务,进行如下的设置,将其设置的集群设为“SH”,改变其端口号,并启动。
启动后可以发现,不同集群都被分开了,如下:
3.2 负载均衡策略设置
修改负载均衡策略可以设置优先访问那个集群,我们将order也设置再集群HZ中,这样,我们需要其优先访问HZ的集群,就得修改负载均衡的策略,修改其负载均衡的策略如下,在order的配置文件中设置如下:
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
cluster-name: HZ # 集群名称
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
重启后访问 http://localhost:8080/order/103 等,再看控制台,发现UserApplication和UserApplication2打印出了信息,但是UserApplication3,即设置为SH的集群未打印出信息。
如果HZ的集群全部挂了呢,我们将其停止服务后得到在访问网址发现依然能够得到信息,证明优先访问是起效的。
4. 权重设置
实际部署中会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
但默认情况下NacosRule是同集群内随机挑选,不会考虑机器的性能问题。
因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。
在nacos控制台,找到user-service的实例列表,点击编辑,即可修改权重,如下:
5. 环境隔离
Nacos提供了namespace来实现环境隔离功能。
- nacos中可以有多个namespace
- namespace下可以有group、service等
- 不同namespace之间相互隔离,例如不同namespace的服务互相不可见
默认情况下,所有service、data、group都在同一个命名空间中,名为public,我们可以点击页面新增一个命名空间。
命名空间新增后,可以发现服务列表已经有了两个空间了。
如果想将一个微服务添加到dev空间,比如将order添加到dev空间,在order的配置文件中设置如下:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ
namespace: 4ddd5004-5d6b-43de-9a11-6f26adb8125f # 命名空间,填ID
namespace
项是命名空间生成的UUID,之后重启,order服务就出现在了dev列表中,其不能访问public中的服务。
6. 临时实例
打开服务列表,我们可以发现,这些实例都是临时实例。
那么,临时示例与非临时实例有什么区别呢?Nacos与Eureka注册中心类似,其作用可以从下图看出。
可以发现,
- 临时实例每5秒进行一次心跳检测,若没有了心跳,那么就将其剔除服务列表;
- 非临时实例由Nacos主动询问,若不健康,则不会将其进行剔除,会显示实例不健康。
如果想要设置实例为非临时实例,可以在配置文件中进行如下配置:
spring:
cloud:
nacos:
discovery:
ephemeral: false # 设置为非临时实例