0


RabbitMq中交换机(Exchange)、队列(Queue)和路由键(Routing Key)

RabbitMQ 是一个消息代理系统,使用交换机(Exchange)、队列(Queue)和路由键(Routing Key)来管理消息的传递。它们分别起到不同的作用,构成了消息从生产者到消费者的传递路径。

以下是详细的解释:

1. 交换机(Exchange)

作用

交换机负责接收来自生产者的消息,并根据一定的路由规则将消息分发给一个或多个队列。它是生产者和队列之间的中间层,生产者永远不会直接将消息发送到队列,而是通过交换机。

种类

RabbitMQ 中有几种类型的交换机,每种交换机的消息路由行为都不同:

  • Direct(直连交换机):根据精确匹配路由键(Routing Key)来将消息转发到绑定了相同路由键的队列。
  • Fanout(扇出交换机):不处理路由键,直接将消息广播给绑定到该交换机的所有队列。类似广播机制。
  • Topic(主题交换机):根据路由键的模式匹配(可以使用通配符)将消息路由到符合条件的队列。
  • Headers(头交换机):根据消息的 headers(头部信息)属性来路由,而不是使用路由键。
作用场景

交换机的主要作用是 决定消息应该被发送到哪些队列,每种交换机的类型决定了消息的路由逻辑。


2. 队列(Queue)

作用

队列是消息的实际存储位置。消息被发送到队列后,消费者从队列中取出并处理。队列中的消息按照 先进先出(FIFO) 的顺序被消费者处理。

  • 队列是点对点通信的终点,消费者从队列中拉取消息并处理,每个消息只会被一个消费者处理(除非有特别的广播机制)。
  • 消息可以在队列中持久化(持久化队列),即使 RabbitMQ 服务器重启,消息仍然会保存在队列中。
作用场景

队列的作用是 存储和传递消息。消息在队列中被保存,直到消费者来获取和处理消息。队列可以支持多种消费者,并且保证消息被处理一次且仅一次。


3. 路由键(Routing Key)

作用

路由键是生产者在将消息发送给交换机时提供的一个字符串,用来指定消息的路由路径。交换机会根据路由键的内容,决定该消息应该发送到哪些队列。

  • Direct 交换机 中,路由键用于精确匹配。例如,路由键 task_queue 只会将消息发送到绑定了 task_queue 路由键的队列。
  • Topic 交换机 中,路由键可以使用通配符进行模糊匹配。例如,device.* 可以匹配 device.datadevice.status,但 device.# 可以匹配多个词。
作用场景

路由键的作用是 指定消息传递路径。交换机会根据路由键将消息发送到符合条件的队列。


三者的区别和作用总结

名称作用和功能角色区别交换机(Exchange)接收生产者的消息并根据路由键将消息发送到一个或多个队列。交换机本身不保存消息,只负责转发消息。中间人决定消息如何分发到不同的队列队列(Queue)用于存储消息,等待消费者来处理。消费者从队列中拉取消息进行处理。队列是消息的最终接收点,消息只能在队列中被消费一次。消费者终点存储和传递消息路由键(Routing Key)生产者指定的一个字符串,用来决定交换机如何将消息路由到队列。路由键可以是精确匹配或模糊匹配(使用通配符)。消息路由控制决定消息走向哪些队列

三者之间的关系:

  1. 生产者(Producer):向 交换机 发送消息,并指定一个 路由键
  2. 交换机(Exchange):根据绑定的规则和 路由键,将消息转发到合适的 队列
  3. 队列(Queue):消息最终到达 队列,并等待消费者取出并处理。
  4. 消费者(Consumer):从队列中取出消息进行处理。

流程示例:

假设我们有以下 RabbitMQ 配置:

  • 交换机:task_exchange(类型为 Direct)。
  • 队列:task_queue
  • 路由键:task.new.
消息传递过程:
  1. 生产者发送一条消息到 task_exchange,并指定路由键为 task.new
  2. task_exchange 交换机会检查是否有队列绑定了 task.new 路由键。
  3. 如果 task_queue 队列绑定了 task.new 路由键,交换机会将消息发送到 task_queue
  4. 消费者从 task_queue 中拉取消息并进行处理。

这个流程说明了交换机、队列和路由键之间如何协同工作来完成消息的路由和处理。


常见应用场景:

  1. Direct 交换机:- 用于精确匹配路由键的场景,比如不同的任务类型对应不同的队列,确保消息到达正确的队列。
  2. Fanout 交换机:- 广播消息给多个消费者,常用于发布/订阅模式,比如推送系统消息给所有消费者。
  3. Topic 交换机:- 适用于需要根据复杂模式路由消息的场景,比如日志系统,路由键可以根据日志级别(如 errorinfo)路由到不同的队列。


本文转载自: https://blog.csdn.net/weixin_38650077/article/details/142312476
版权归原作者 super_journey 所有, 如有侵权,请联系我们删除。

“RabbitMq中交换机(Exchange)、队列(Queue)和路由键(Routing Key)”的评论:

还没有评论