0
点赞
收藏
分享

微信扫一扫

Nacos服务注册与发现

黎轩的闲暇时光 2022-04-27 阅读 61

Nacos

黑马程序员:https://www.bilibili.com/video/BV1LQ4y127n4?p=17

简介

Nacos阿里巴巴的产品,SpringCloud的一个组件,相比Eureka功能更加丰富,在国内受欢迎程度较高。

安装

Github下载地址:Tags · alibaba/nacos · GitHub 推荐使用1.x版本
启动服务器

下载完毕后解压,进入bin目录下进入命令行,执行.\startup.cmd -m standalone 启动命令(standalone代表着单机模式运行,非集群模式):

关闭服务器

shutdown.cmd 或者双击shutdown.cmd运行文件。

Nacos的使用

在父类添加阿里巴巴管理依赖
注意版本号冲突

<!--springcloud - alibaba-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.4.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

服务提供者
导入Nacos依赖springcloud-provider-dept-8001

<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.1.4.RELEASE</version>
</dependency>

配置nacos

spring:
  cloud:
    nacos:
      server-addr: localhost:8848

测试
在这里插入图片描述
服务消费者

导入nacos依赖springcloud-consumer-dept-80

<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置文件

# 端口
server:
  port: 80
  
spring:
  cloud:
    nacos:
        server-addr: localhost:8848
  application:
    name: nacos-demo

解决办法,给注册的服务添加一个name服务名字

启动测试

在这里插入图片描述

Nacos注册中心

Nacos服务分级存储模型

服务跨集群调用问题

  • 服务调用尽可能选择本地集群的服务,跨集群调用延迟较高
  • 本地集群不可访问时,再去访问其它集群

nacos集群的配置

服务提供者

修改配置文件

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: SH #上海集群

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qPXO423Y-1651035933788)(C:\Users\联想yyds\AppData\Roaming\Typora\typora-user-images\image-20220426161318147.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-21KnGxZt-1651035933789)(C:\Users\联想yyds\AppData\Roaming\Typora\typora-user-images\image-20220426161328369.png)]

服务消费者

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ # 在消费中,优先访问杭州的集群

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lmOccI9g-1651035933790)(C:\Users\联想yyds\AppData\Roaming\Typora\typora-user-images\image-20220426161943082.png)]

但是经过测试,依然采用轮询的方式来访问集群。所以必须修改负载均衡。

NacosRule负载均衡

根据集群负载均衡

在服务消费者springcloud-consumer-dept-80

优先访问已经设置的集群,如果本地没有,则访问其他集群。

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

根据权重负载均衡

实际部署中会出现这样的场景:

  • 服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DQIVLKWG-1651035933791)(C:\Users\联想yyds\AppData\Roaming\Typora\typora-user-images\image-20220426163418909.png)]

当权重设置为0时,将不会被访问,所以可以用来重启服务。

环境隔离(namespace)

Nacos中 服务存储和服务存储的最外层都是一个名为namespace的东西,用来做最外层隔离。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r61ncDQ4-1651035933791)(C:\Users\联想yyds\AppData\Roaming\Typora\typora-user-images\image-20220426163901947.png)]

新建命名空间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YfolGRJc-1651035933792)(C:\Users\联想yyds\AppData\Roaming\Typora\typora-user-images\image-20220426164311666.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oQC5quIu-1651035933792)(C:\Users\联想yyds\AppData\Roaming\Typora\typora-user-images\image-20220426164356211.png)]

创建完成

配置服务提供者

spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        namespace: 55a18106-a5bf-43dc-b4aa-2615c63f39b8 # dev环境
        ephemeral: false # 非临时实例

重启服务

在这里插入图片描述

不同的环境下,不可以访问。

No instance available for userservice

Nacos注册中心原理

在这里插入图片描述

服务消费者—注册中心

定时拉取服务 pull:每隔三十秒更新一次。

主动推送服务 push:若30秒内服务宕机,注册中心会主动推送变更信息即使更新服务的状态。

服务提供者—注册中心

默认情况下所有的实例都是临时实例,宕机就会被剔除,推荐使用临时实例

非临时实例nacos不会采用心跳检测。如果宕机就会等待其恢复健康。

spring:
  cloud:
    nacos:
      discovery:
		ephemeral: false # 非临时实例

停掉服务后

只要不删除一直等待服务恢复。
在这里插入图片描述

与Eureka 的对比

共同点:

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

区别:

  • Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP模式。
举报

相关推荐

0 条评论