Rabbitmq-核心概念

3/17/2024 rabbitmq

# 交换机类型

  • default(默认交换机):系统内置交换机,名字为"",所有队列不指定绑定交换机的情况下默认都是绑定在该交换机上,并且会为绑定创建一个路由键(routting key),值为队列名称。
  • fanout(扇形交换机):消息将发送到所有绑定在该交换机上的队列,忽略消息的路由键。
  • direct(直连交换机):根据消息的路由键(routting key)进行转发。只有当消息的路由键和队列绑定到交换机上的路由键完全匹配时才会进行转发。
  • topic(主题交换机):直连交换机的扩展,队列绑定到交换机的路由键(routting key)不仅可以是具体的,也可以是通配符表达式(匹配多个)。
  • headers(头部交换机):根据消息的头部属性进行路由。在将队列绑定到交换机时可以声明一个map,消息到达根据消息头和map中的键值进行匹配。
    • x-match-all: 所有的键值都匹配才能收到消息
    • x-match-any: 只要有键值匹配就收到消息

# 队列类型

  • classic: 在单机环境中,有较高的可靠性。
  • quorum(仲裁队列):适用于分布式场景,消息需要集群中多半节点同意确认后,才会写入队列中。
  • stream:该队列消息是持久化到磁盘中的,适用于分布式场景,适合消费者多,读消息频繁的场景。

# 工作模式

RabbitMQ提供了常见的工作模式,分别为如下:

  • Simple模式:一个生产者和一个消费值;
  • Work模式: 一个生产者和多个消费者,共同消费一个队列;
  • Publish/Subscribe模式: 发布订阅模式,每个消费者可以消费到队列上的全部消息;
  • Routing模式:消息根据路由键分发到不同的队列中;
  • Topic模式:拥有模糊匹配的 Routing模式

# 生产者消息可靠性投递

保障消息成功发送到队列中:

  1. producer 需要接受到 broker 发送的确认应答。
  2. 完善的补偿机制,失败重发

rabbitmq对于生产端有两层保障,首先是producer 到 exchange, 通过 confirmCallback 来回执, 其次是 exchange 到 queue, 通过 returnCallback 来回执。

rabbitmq中,confirmCallback 对于 producer 默认是关闭, 需要进行相应配置进行开启。 rabbitmq中, returnCallback 对于 producer 默认也是关闭,在发送消息时, mandatory 必须开启才能执行 returnCallback

# 消费值消息可靠性

只要保证消费值在消费消息时异常不丢失即可保证可靠性。

rabbitmq 提供了消费者应答机制来使 broker能够感知 consumer 是否消费成功。

默认情况下 消费值应答机制 是自动的, 及 broker 将消息推送给 consumer 后便会从队列中删除消息;消费者在消息消费过程中失败了, 消息就存在丢失情况