RabbieMQ 消息发布

消息发布

交换机: 在 RabbitMQ 中,Exchanges(交换机)是消息的分发中心,它根据绑定的规则将消息路由到对应的队列。
消息队列:一个先进先出的消息列表,交换机根据 routingkey 将消息转发给 queue,连接到队列的消费者就可以接收到消息

  • 生产者:只能指定exchange与routingkey进行发布
  • 消费者:只能指定消息队列名称进行消费

单个消息队列轮询消费

  • 如果多个消费者连接到同一个队列消费,那么每次队列发布时,消息是轮询发送给消费者的(仅测试 topic 类型的交换机)

消息广播

要实现消息广播的功能,有两种方案

  1. 全局广播
    消息发布到 amq.fanout 类型的交换机时,会全部广播到该交换机下的所有消息队列,无需指定 routingkey.
    这是因为 fanout 类型的交换机不进行任何路由键的匹配操作,它只是简单地将接收到的所有消息发送到与其绑定的所有队列中。这种特性使得 fanout 类型的交换机非常适合实现发布/订阅模式,其中多个消费者可以同时接收到相同的消息。因此,当您使用 fanout 类型的交换机时,确实无需指定 routing key,消息会自动广播到所有绑定的队列。
  2. 分组广播(局部广播)
    消息发布到 amq.topic 类型的交换机时,需要指定 routingkey ,此时消息会广播到所有绑定到 routingkey 的消息队列。
    在 RabbitMQ 中,当消息发布到 amq.topic 类型的交换机时,确实需要指定 routing key,并且消息会根据这个 routing key 被广播到所有绑定到该 routing key 或其通配符匹配的队列中。
    Topic 类型的交换机支持通配符匹配,其中“.”用于分隔 routing key 的各个部分,“*”用于匹配一个单词,“#”用于匹配零个或多个单词。这使得 topic 类型的交换机能够实现更复杂的路由规则。
    例如,假设有一个 routing key 为 "stock.usd.nyse",那么它可以匹配到 "stock." 或 ".nyse" 或 "stock.usd.#" 等绑定。这样,只要队列绑定了符合这些模式的 routing key,它们就会接收到发布的消息。
    因此,当使用 topic 类型的交换机时,正确指定 routing key 是非常重要的,它决定了消息将被路由到哪些队列。
posted @ 2024-07-14 21:54  RafaelLxf  阅读(22)  评论(0)    收藏  举报