RabbitMQ

消息队列有什么用

  1. 服务解耦
  2. 异步处理
  3. 流量控制(削峰)

    三大组件

  4. 交换机 :消息代理服务器中用于把消息路由到队列的组件。

  5. 队列 :用于存储消息队列的数据结构,位于硬盘或内存中。
  6. 绑定 :一套规则,用于告知交换机应该将消息投至那个队列。

    四种交换机

  7. fanout exchange :把发送到该交换机的信息路由到所有与其绑定的队列中。

  8. direct exchange :把消息路由到RoutingKey完全匹配的队列中。
  9. topic exchange :在完全匹配的基础上增加通配符匹配规则,*代表一阶,#代表多阶。
  10. headers exchange :消息头匹配,性能差。

    如何保证消息的可靠性(即防丢失)

  11. 生产者-RabbitMQ :

    1. 事务机制(吞吐量低)

channel.txSelect() 用于开启事务
channel.txCommit() 用于提交事务
channel.txRollback() 用于回滚事务
执行步骤

  1. 1. 客户端(消息提供者)发送 Tx.Select 将信道设置为事务模式
  2. 1. Broker(服务器)回复 Tx.Select-OK 确认已将信道设置为事务模式
  3. 1. 发送消息
  4. 1. 客户端发送 Tx.Commit 提交事务
  5. 1. Broker(服务器)回复 Tx.Commit -OK 确认消息提交
  1. confirm机制 :

通过 confirm 机制发送的消息都会指定一个 deliveryTag(类似于id),发送后RabbitMQ会返回一个包含 deliveryTag 、 一个标志(ack/nack)、一个确认机制(true = 批量确认,false = 单挑确认)的消息
单条 confirm 模式 :发送一条等待确认一条,效率略高于事务
批量 confirm 模式 :发送多条后等待一条确认消息
异步 confirm 模式 :维护一个已发送消息的集合,当收到确认消息时从集合删除对应的消息

  1. RabbitMQ自身 :持久化、集群
  2. RabbitMQ-消费者
    1. 死信机制 :超时未消费、队列上限、队列拒绝 的消息 发送到死信交换机上
    2. 消息补偿机制 :发现未成功消费的信息并重新发送
    3. basicAck机制 :

      如何保证高可用

      镜像集群模式 :
      创建的queue,无论是配置数据还是queue里的消息都会存于多个实例上
      每次发送消息,都会把消息同步到多个实例