• SpringCloud学习(四)——Nacos注册中心


    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.cloudgroupId>
        <artifactId>spring-cloud-alibaba-dependenciesartifactId>
        <version>2.2.6.RELEASEversion>
        <type>pomtype>
        <scope>importscope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    之后在Order和User的服务中导入依赖如下

    <dependency>
        <groupId>com.alibaba.cloudgroupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4

    并在application.yml 配置文件中进行如下配置

    spring: 
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
    
    • 1
    • 2
    • 3
    • 4
    • 5

    最后启动服务,打开并登陆Nacos可看到下面的画面:
    在这里插入图片描述
    上述代表我们注册成功。

    3. 注册集群

    3.1 服务器集群

    服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。

    比如User这个服务我们可以有多个集群来进行实现,将User编入集群的操作仅需要在配置文件中添加如下配置

    spring: 
      cloud:
        nacos:
          discovery:
            cluster-name: HZ # 集群名称
    
    • 1
    • 2
    • 3
    • 4
    • 5

    重新启动后可以发现,集群名称已经由默认改为了 “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 # 负载均衡规则
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    重启后访问 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    namespace 项是命名空间生成的UUID,之后重启,order服务就出现在了dev列表中,其不能访问public中的服务。

    6. 临时实例

    打开服务列表,我们可以发现,这些实例都是临时实例。
    在这里插入图片描述
    那么,临时示例与非临时实例有什么区别呢?

    Nacos与Eureka注册中心类似,其作用可以从下图看出。
    在这里插入图片描述
    可以发现,

    • 临时实例每5秒进行一次心跳检测,若没有了心跳,那么就将其剔除服务列表;
    • 非临时实例由Nacos主动询问,若不健康,则不会将其进行剔除,会显示实例不健康。

    如果想要设置实例为非临时实例,可以在配置文件中进行如下配置:

    spring:
      cloud:
        nacos:
          discovery:
            ephemeral: false # 设置为非临时实例
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    【Linux】可重入VS线程安全
    MyBatis Plus整合Redis实现分布式二级缓存
    springboot+微信小程序基于微信小程序的宿舍管理系统
    npm详解
    Spring 6【异常通知、Schema-based方式包含多个相同通知的执行顺序、AspectJ实现AOP、在通知中获取切入点参数的写法 】(十五)-全面详解(学习总结---从入门到深化)
    qmake TEMPLATE subdirs
    如何使用Excel进行设备管理:巡检、维修、保养、备件管理
    怎么计算品牌声量?在线查询全网声量的3种工具分享
    学习笔记——动态路由——OSPF(OSPF协议的工作原理)
    数据结构-----红黑树的插入
  • 原文地址:https://blog.csdn.net/ifhuke/article/details/127744730