【问题标题】:Set max number of messages in the queue设置队列中的最大消息数
【发布时间】:2013-07-13 09:29:19
【问题描述】:

我想知道是否可以设置队列中的最大消息数?

假设我希望队列 Foo 中的消息不超过 100 条,有可能吗?

【问题讨论】:

    标签: python rabbitmq queue pika


    【解决方案1】:

    是的,有可能。

    来自official documentation

    队列的最大长度可以限制为一组 通过提供 x-max-length 队列声明参数与 一个非负整数值。

    AFAIK,鼠兔的 channel.queue_declare 有 queue_declare 有 arguments 参数,这绝对是你想要的。

    【讨论】:

    • 谢谢,我试过了,它有效,但我对一件事不满意:"Messages will be dropped or dead-lettered from the front of the queue to make room for new messages once the limit is reached."。如果队列已满,您知道如何抛出异常吗?因为它会默默地覆盖消息,例如,如果限制设置为 10,并且我发布了 15 条消息 [0 - 14],我只会收到从 5 到 14 的消息。如果没有任何警告,那 5 条消息会丢失
    • 没有机会在队列中获取消息编号(除非您使用管理插件),也不会在队列已满时抛出异常。看起来你不需要 RabbitMQ 来完成这个任务。
    • @Vor 你可以设置一个交换来处理“死信”,根据rabbitmq.com/dlx.html。这个方法不会抛出异常,但是当你收到交换的“死信消息”时,你可以编写一些代码来处理它,比如发出警告。
    【解决方案2】:

    像这样去做,然后快乐!

    import pika
    
    
    QUEUE_SIZE = 5
    
    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
    channel = connection.channel()
    
    channel.queue_declare(
        queue='ids_queue',
        arguments={'x-max-length': QUEUE_SIZE}
    )
    

    参数中,您还需要跟踪队列的队列溢出行为

    【讨论】:

      猜你喜欢
      • 2017-04-09
      • 2012-05-06
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-31
      • 2016-03-04
      • 2019-04-02
      相关资源
      最近更新 更多