Kombu是否可以发布并订阅多个消费者

 非徒雨思_184 发布于 2023-01-01 14:46

将Kombu与RabbitMQ结合使用以实现经典的发布/订阅设计模式。我创建了一个创建主题的生产者:

from kombu import Connection, Exchange, Queue

media_exchange = Exchange('media', 'topic', durable=False)
video_queue = Queue('video', exchange=media_exchange, routing_key='video')

with Connection('amqp://guest:guest@localhost//') as conn:
    producer = conn.Producer(serializer='json')
    producer.publish('Hello World!',
                      exchange=media_exchange, routing_key='video',
                      declare=[video_queue])

然后,我创建了一个要从发布者那里消费的消费者:

from kombu import Connection, Exchange, Queue

media_exchange = Exchange('media', type='topic', durable=False)
video_queue = Queue('video', exchange=media_exchange, routing_key='video')

def process_media(body, message):
    print(body)
    #message.ack()

with Connection('amqp://guest:guest@localhost//') as conn:
    with conn.Consumer(video_queue, callbacks=[process_media]) as consumer:
        # Process messages and handle events on all channels
        while True:
            conn.drain_events()

然后启动两个消费者,每个消费者在一个单独的终端中;两者都等待消息:

terminal 1: python consumer.py
terminal 2: python consumer.py

当我运行生产者时,只有一个消费者收到该消息。

1 个回答
  • 生产者在交换中发布,而不是在队列中发布。队列由使用者定义。当为每个使用者使用不同的队列名称时,所有人都会收到消息。当使用多个使用者使用同一队列时,这就是负载平衡,这就是为什么只有一个使用者可以收到消息的原因。

    2023-01-01 14:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有