• 02_Alibaba微服务组件Nacos注册中心


    Alibaba微服务组件Nacos注册中心

    1.什么是nacos

    注册中心+配置中心+服务管理 平台

    注册中心演变过程

    管理所有微服务、解决微服务之问调用关系错综复杂、难以维护的问题;

    在这里插入图片描述

    在这里插入图片描述

    注册中心核心功能

    Nacos discovery

    服务注册:Nacos Client会通过发送REST请求的方式向Nacos server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Sevet接收到注册请求后,就会把这些元款据信息存储在一个双层的内存Map中。

    服务心跳︰在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除。默认5s发送一次心跳

    服务同步: Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性。leader raft

    服务发现: 服务消费者(Nlacos Cient)在调用服务提供者的服务时,会发送一个REST请求给Nacos Sever,获取上面注册的服务清单,并且缓行在Nacos Client本地,同时会在Nacs cient本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存

    服务健康检查: Nacos Server会开启一个定时任务用来检查注册服务实例的狸康情况,对于超过15s没有收到客户诟心跳的实例会将它的ealty属性置为lase(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)

    主流的注册中心区别

    CAP C 一致性 A 可用性 P 分区容错性

    在这里插入图片描述

    Nacos Server部署

    下载地址https://github.com/alibaba/nacos/releases

    修改bin\startup.sh改成单机启动(默认集群)

    在这里插入图片描述

    双击startup.cmd

    访问地址nacos首页账号密码都为nacos

    Nacos client搭建

    复制模块order 和 stock

    取名为order-nacos和stock -nacos

    父工程添加子模块

    <module>order-nacosmodule>
    <module>stock-nacosmodule>
    
    • 1
    • 2

    order-nacos和stock -nacos

    1.引入依赖

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

    2.配置文件(order-nacos)

    server:
      port: 8020
    #应用名称 nacos会将该名称当作服务名称
    spring:
      application:
        name: order-service
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
          discovery:
            username: nacos
            password: nacos
            namespace: public
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    配置文件(stock -nacos)

    server:
      port: 8021
    
    #应用名称 nacos会将该名称当作服务名称
    spring:
      application:
        name: stock-service
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
          discovery:
            username: nacos
            password: nacos
            namespace: public
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    主启动类 注解@EnableDiscoveryClient 可加可不加

    启动 查看nacos发现两个服务列表

    (order-nacos)更改controller

    String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
    
    • 1

    访问 localhost:8020/order/add 报错

    (order-nacos)主启动类加上注解@LoadBalanced 默认轮询

    @SpringBootApplication
    //@EnableDiscoveryClient
    public class OrderNacosApplication {
        public static void main(String[] args) {
            SpringApplication.run(OrderNacosApplication.class,args);
        }
    
    
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate(RestTemplateBuilder builder){
            RestTemplate restTemplate=builder.build();
            return  restTemplate;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    再次访问localhost:8020/order/add 成功回显

    get一个新技能

    启动一个完全一样的项目,但端口号不一样

    在这里插入图片描述

    在这里插入图片描述

    点击apply->ok

    stock-nacos控制层改变

    @RestController
    @RequestMapping("/stock")
    public class StockController {
    
        @Value("${server.port}")
        String port;
    
        @RequestMapping("/reduct")
        public String reduct(){
            System.out.println("扣减库存");
            return "扣减库存"+port;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    重新启动 8020 8021 8022

    再次访问localhost:8020/order/add

    发现 回显的端口号8021 8022重复跳转(负载均衡的轮询机制 ribbon)

    在这里插入图片描述

    Nacos 管理界面详细介绍

    命名空间的概念

    namespace: public
    
    • 1

    pro环境 dev环境 分隔开来

    在这里插入图片描述

    分组的概念和命名空间差不多

    雪崩保护-就是保护阈值

    0-1之间 百分比

    ephemeral: false # 永久实例   默认是true 临时实例
    # 哪怕宕机了也不会删除实例
    
    • 1
    • 2

    健康实例 — 不健康实例

    健康实例数/总实例数 < 保护阈值

    1/2 < 0.6 那么就用把挂了的机子先给它用,防止服务雪崩

    权重 和负载均衡器有关 越大让别人访问它越多

    注册中心配置项详解

    spring:
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
          discovery:
            namespace: public
            
    # namespace: public #相同特征的服务进行归类分组管理
    
    # ephemeral: false # 默认=true(临时实例)  ―当服务宕机超过心跳就会将实例剔除掉  #永久实例―哪怕宕机了也不会删除实例当服务宕机永远不会剔除掉
    
    #service: 默认取${spring.application.name},也可以通过该选项配置
    
    #group:默认DEFAULT_GROUP更细的相同特征的服务进行归类分组管理
    
    #weight:通常要结合安装权重的负载均衡策略,权重越高分配的流量就越大
    
    #metadata : version=1可以结合元数据做扩展
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    Nacos集群部署

    linux部署 jdk maven nginx作为负载均衡 mysql

    下载 nacos-server-1.4.1.tar.gz

    mkdir nacos
    
    # 或者利用wget的方式下载
    tar -zxvf  nacos-server-1.4.1.tar.gz  # 解压 
    创建3份 ls
    [root@localhost nacos]# ls
    nacos8849 nacos8850 nacos8851
    
    ## 要先装好mysql的环境
    
    [root@localhost nacos]# cd nacos8849/conf/ # 进入配置文件
    vim application.properties # 修改一下
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    server.port=8849
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
    db.user.0=root
    db.password.0=root
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    window下拿nacos/conf/nacos-mysql.sql

    导入运行

    [root@localhost conf]# cp cluster.conf.example cluster.conf
    
    加上下面三行保存退出:
    虚拟机ip:8849
    虚拟机ip:8850
    虚拟机ip:8851
    :wq
    
    [root@localhost nacos8849]# cd bin
    [root@localhost bin]# vim startup.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    本来2g改成521m(如果内存很给力就不用了)

    在这里插入图片描述

    [root@localhost bin]# ./startup.sh  #启动
    # 访问测试
    
    • 1
    • 2
    复制nacos8849/conf/application.properties文件给其他两个 
    复制nacos8849/conf/cluster.conf文件给其他两个 
    复制nacos8849/bin/startup.sh文件给其他两个 
    #更改一下8850 8851中application.properties中的端口号
    
    启动8850 8851
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    配置nginx

    1.添加言方源仓库
    yum install -y yum-utils
    yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
    
    2.安装openresty
    yum install -y openresty
    
    cd /usr/local/openresty/
    cd nginx
    
    
    [root@localhost nginx]# vim conf/nginx.conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
        upstream nacoscluster {
            server ${ip}:8849;
            server ${ip}:8850;
            server ${ip}:8851;
        }
        server{
            listen  8847;
            server_name localhost;
    
            location /nacos/ {
                proxy_pass http://nacoscluster/nacos;
            }
        }
    :wq 
    
    [root@localhost nginx]# cd sbin
    [root@localhost nginx]#./nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    ip:8847/nacos/

    更改application.yml配置(order-nacos stock-nacos)

    server-addr: ip:8847
    
    • 1

    启动8020 8021 8022

  • 相关阅读:
    多线程(一)——委托与多线程
    11.多进程与多线程
    公钥加密算法-RSA
    算法 三数之和-(双指针)
    sliver
    Hadoop3教程(八):MapReduce中的序列化概述
    05 CSS02
    Kubernetes面试题分享
    java实现分类下拉树,点击时对应搜索---后端逻辑
    Synchronized和Lock的区别
  • 原文地址:https://blog.csdn.net/xixihaha_coder/article/details/126582237