【问题标题】:One channel - one queue in RabbitMQ?一个通道 - RabbitMQ 中的一个队列?
【发布时间】:2016-05-20 15:16:43
【问题描述】:

到目前为止,对于 RabbitMQ 中的单个队列,我使用的是单个通道 但是现在我有多个动态创建的队列,所以我必须为 每个 队列创建一个 new 通道,或者一个通道可以接收/发送来自/发送到不同队列的消息?

   # consuming
    for ch in items:
      channel1 = rconn.channel()
      channel1.queue_declare(queue=itm)
      channel1.basic_consume(some_callback, queue=itm, no_ack=True)
      channel1.start_consuming()


    # publishing
    for ch in items:
    # ....
      channel1.basic_publish(exchange="", routing_key=itm, body="fdsfds")

【问题讨论】:

    标签: python rabbitmq


    【解决方案1】:

    我在尝试重用频道时遇到了奇怪的问题。我会选择多个频道。我使用 iirc 结束了每种类型的生产者/消费者一个。

    【讨论】:

    • 你能给我看一下代码吗,因为当我调用“start_sumption()”时它会进入一个无限循环,那么我该如何设置多个通道?
    • 澄清一下,我在一个应用程序中有不同类型的消息处理器,我试图维持一个单一的渠道,并在消费者和用来吸引粉丝的东西之间共享它。这是几年前的事了:)
    • 抱歉,这无助于我理解如何做到这一点。
    【解决方案2】:

    您不需要为每个频道设置一个队列。您可以在同一通道上的多个队列中声明和消费。请参阅this question 了解更多信息。

    在许多客户端库中,队列声明“RPC”操作不应与消费“流”操作混合。在这种情况下,最好有两个通道:一个用于任意数量的 RPC 事情,例如队列声明、删除、绑定创建等,另一个用于任意数量的消费。

    我认为官方的 Python 驱动程序正确处理了这个问题,并且不需要两个以上的通道。

    要(非常粗略且不确定地)对此进行测试,在某处启动发布者,将稳定的消息流发送到队列,并在该队列上创建一个消费者,该消费者在重复声明其他队列的同时消费消息。如果一段时间内一切正常,您的客户端就可以很好地混合 RPC 和流式操作。当然,客户关于这个主题的文档比这个测试更权威。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多