Zookeeper、Redis、RabbitMQ

在分布式环境下,如果不用SpringCloud,那么可以用Zookeeper来完成:
    注册中心
    配置集中管理
    集群管理
    分布式锁、分布式任务
    队列的管理
Zookeeper就是一个文件系统+监听通知机制

1、Zookeeper

1、安装zookeeper

安装视频:https://www.bilibili.com/video/BV15e411W75G?p=198

docker-compose.yml文件内容

version: "3.1"
services:
  zk:
    image: daocloud.io/daocloud/zookeeper:latest
    restart: always
    container_name: zk
    ports:
      - 2181:2181

Zookeeper、Redis、RabbitMQ_第1张图片

2、 Zookeeper理论知识点

1、Zookeeper结构
    每一个节点都称为znode
    每一个znode中都可以存储数据(没有目录、文件之分)
    在同一级节点,名称不允许重复
2、znode的4种类型
    1、持久节点
        永久的保存在Zookeeper
    2、持久有序节点
        永久的保存在Zookeeper,zookeeper会给节点添加一个有序的序号
            eg:添加一个节点xx,会存储成xx000001
    3、临时节点
        当存储的客户端与Zookeeper服务断开连接时,这个临时节点自动删除
    4、临时有序节点
        当存储的客户端和Zookeeper服务断开连接时,这个临时节点自动删除
            序号与持久有序节点的序号类似

3、Zookeeper的监听通知机制
    客户端可以监听Zookeeper中的Znode节点
    Znode改变时,会通知监听当前Znode的客户端
4、Zookeeper常用命令

Zookeeper、Redis、RabbitMQ_第2张图片

3、 Zookeeper集群安装

安装视频:https://www.bilibili.com/video/BV15e411W75G?p=206

不要用dacloud.io的镜像,会在java项目中使用时,因为curator-recipes版本问题,导致加锁出错

可以参考https://blog.csdn.net/pyl574069214/article/details/105593946配置镜像加速daemon.json中

docker-compose.yml文件内容

version: "3.1"
services:
  zk1:
    image:
zookeeper
    restart: always
    container_name: zk1
    ports:
      - 2181:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
  zk2:
    image:
zookeeper
    restart: always
    container_name: zk2
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
  zk3:
    image:
zookeeper
    restart: always
    container_name: zk3
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181

2、Redis

1、redis解决的问题

redis实现:数据共享、分布式锁、分布式session共享

https://www.bilibili.com/video/BV15e411W75G?p=22

 

 

 

 

2、安装redis

安装视频:https://www.bilibili.com/video/BV15e411W75G?p=25

docker-compose.yml文件内容

version: "3.1"
services:
  redis:
    image: daocloud.io/library/redis:5.0.7
    restart: always
    container_name: redis
    environment:
      - TZ=Asiz/Shanghai
    ports:
      - 6379:6379

Zookeeper、Redis、RabbitMQ_第3张图片

3、RabbitMQ

 1、RabbitMQ消息的可靠性
    1、如果消息已经到达了RabbitMQ,但是RabbitMQ宕机了,消息时不会丢的
        因为RabbitMQ的消息队列(Queue)有持久化机制
    2、消费者在消费消息时,如果执行了一部分,还没有执行完,消费者宕机了,消息也不会丢
        因为有手动ACK,当消费者告诉RabbitMQ已经消费完,才会删除消息
    3、生产者发送消息时,由于网络问题,导致消息没发送到RabbitMQ,消息也不会丢
        因为RabbitMQ提供了事务。保证消息100%传递(事务操作效率太低,比不加事务慢100倍)
        RabbitMQ还提供了Confirm确认机制(比事务效率高很多,比不加事务的还是要慢一点点)

2、Confirm的3种方式

RabbitMQClient

Zookeeper、Redis、RabbitMQ_第4张图片

         //1. 获取Connection
        Connection connection = RabbitMQClient.getConnection();

        //2. 创建Channel
        Channel channel = connection.createChannel();

  1、普通Confirm方式

Zookeeper、Redis、RabbitMQ_第5张图片
    2、批量Confirm方式

Zookeeper、Redis、RabbitMQ_第6张图片
    3、异步Confirm方式

Zookeeper、Redis、RabbitMQ_第7张图片

 

 

 

 

 

你可能感兴趣的:(java高级)