• RabbitMQ学习-第一部分


    1. 持久化

    持久化:将信息写入到磁盘,关机或重启后能从磁盘恢复数据

    RabbitMQ的持久化包含三类:交换机、对列、消息

    1.1 交换机持久化

    • 重启之后,交换机依然存在
    • 在Features一栏,显示为持久化(D)
    • 通过durable=true参数指明持久化交换机

    1.2 队列持久化

    • 重启后,队列依然存在
    • 通过durable=true参数指明

    1.2.1 可选exclusive参数

    • 只能被第一次声明该队列的连接可见,连接断开后自动删除
    • 同一个连接的不同信道可以同时访问该队列的
    • 适用场景:客户端读取消息

    1.2.2 可选autoDelete参数

    • 如果没有任何订阅的消费者,自动删除
    • 使用场景:临时队列

    1.3 消息持久化

    • 消息在队列中,但还没被消费,服务器重启后,消息依然存在
    • 前提是队列必须是持久化的,否则无意义
    • 通过MessageProperties.PERSISTENT_TEXT_PLAIN指明持久化消息
    • 持久化消息会影响MQ性能,降低吞吐量

    2. 可靠性

    可靠性:指生产者发送的消息是否投递到消费者端被成功消费

    可能会出现的几种不可靠情况:

    1. 客户端消息发送失败
    2. RabbitMQ投递消息失败
    3. 消费者消费失败

    2.1 生产者保证可靠投递

    2.1.1 Mandatory属性

    • 当消息发送失败,触发回调

    2.1.2 Confirm属性(消息确认机制Publisher Confirm)

    • Confirm模式的Channel上,传递的消息都会附带一个唯一ID,当投递成功后,Broker会发送一个确认给生产者

    • 当发生错误,消息重复无法支持回滚,系统需要进行去重

    2.2 RabbitMQ持久化

    1. 交换机持久化 durable=true
    2. 队列持久化 durable=true
    3. 消息持久化 delivery_mode=2

    2.3 消费者保证可靠消费

    • 当消息被消费者正确收到(消费者手动的basic.ack或指定队列auto_ack=true),就会从队列中移除

    • 消费者在没有收到ACK之前,生产者不会继续向消费者投递消息(可以以此来限流

    • 消息确认和拒绝:channel.basicAck()/channel.basicNack()

    3. 基本概念

    3.1 信道Channel

    1. 信道是生产者与消费者通信的渠道
    2. 信道建立在TCP上
    3. 一个TCP连接被多个线程共享,每个线程对应一个信道

    img

    使用信道的好处:提高吞吐、TCP连接复用、减轻服务器压力

  • 相关阅读:
    2022 英特尔® FPGA中国技术周重磅来袭!注册参会有惊喜
    Python的特点有哪些?
    展会预告 | 图扑邀您共聚 IOTE 国际物联网展·深圳站
    BI与ClickHouse:探索式BI的OLAP技术演进之路
    《ChatGPT:强大的人工智能聊天机器人》
    C# halcon SubImage的使用
    Failure [DELETE_FAILED_INTERNAL_ERROR]的解决办法
    蓝桥杯单片机第六届省赛题详细讲解(温度记录器)
    珂朵莉树学习笔记
    xindi-2022-08-23数据分析记录
  • 原文地址:https://blog.csdn.net/u013551615/article/details/126222658