rabbitmq queue_declare arguments参数注释

说明

官方文档
在创建queue时可以指定很多参数,可以限制队列的大小、消息的死信时间、优先级等等。

queue消息条数限制

x-max-length
该参数是非负整数值
官方文档
限制加入queue中消息的条数。先进先出原则,超过10条后面的消息会顶替前面的消息。

credentials = pika.PlainCredentials(username='mq', password='654321')
connection = pika.BlockingConnection(
        pika.ConnectionParameters(
            host='localhost', port=5672, virtual_host='/',
            credentials=credentials
        )
    )
channel = connection.channel()
channel.exchange_declare(exchange='tests', durable=True)
channel.queue_declare(queue='test', durable=True, arguments={'x-max-length': 10})  # 队列中最多10条消息

queue消息容量限制

x-max-length-bytes
该参数是非负整数值
官方文档
该参数和x-max-length目的一样限制队列的容量,但是这个是靠队列大小(bytes)来达到限制。

queue消息存活时间

x-message-ttl
该参数是非负整数值
官方文档
创建queue时设置该参数可指定消息在该queue中待多久,可根据x-dead-letter-routing-keyx-dead-letter-exchange生成可延迟的死信队列

channel.queue_declare(
    queue='test', 
    durable=True, 
    arguments={'x-message-ttl': 60000}  # 消息的存活时间是60秒
)

死信队列

x-dead-letter-routing-key
x-dead-letter-exchange
官方文档
创建queue时参数arguments设置了x-dead-letter-routing-key和x-dead-letter-exchange,会在x-message-ttl时间到期后把消息放到x-dead-letter-routing-key和x-dead-letter-exchange指定的队列中达到延迟队列的目的。

arguments = {
        'x-message-ttl': 10000,  # 延迟时间 (毫秒)
        'x-dead-letter-exchange': exchange,  # 延迟结束后指向交换机(死信收容交换机)
        'x-dead-letter-routing-key': queue,  # 延迟结束后指向队列(死信收容队列),可直接设置queue name也可以设置routing-key
    }
channel.queue_declare(
    queue='test', 
    durable=True, 
    arguments=arguments
)

queue存活时间

x-expires
官方文档
创建queue时参数arguments设置了x-expires参数,该queue会在x-expires到期后queue消息,亲身测试直接消失(哪怕里面有未消费的消息)

channel.queue_declare(
    queue='testss',
    durable=True,
    arguments={'x-expires': 6000}  # 队列的存活时间是6秒
)

消息优先级

x-max-priority
官方文档
版本限制3.5+
创建queue时arguments可以使用x-max-priority参数声明优先级队列 。该参数应该是一个整数,表示队列应该支持的最大优先级。
​​建议使用1到10之间。目前使用更多的优先级将消耗更多的资源(Erlang进程)。
设置该参数同时设置死信队列时或造成已过期的低优先级消息会在未过期的高优先级消息后面执行。
该参数会造成额外的CPU消耗。

channel.queue_declare(queue='test', durable=True, arguments={'x-max-priority': 10})

合理利用参数达到实现的目的。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ中,发送消息时,可以使用`channel.basicConsume`方法来订阅队列并消费消息。下面是对`channel.basicConsume`方法的参数进行讲解: 1. `queue`:指定要订阅的队列名称。 2. `auto_ack`:设置是否自动确认消息的接收。如果设置为True,则表示一旦消息被消费者接收,就自动确认;如果设置为False,则需要手动确认消息的接收。 3. `on_message_callback`:指定一个回调函数,用于处理接收到的消息。当有消息到达时,会调用该回调函数进行处理。 4. `exclusive`:设置是否为独占模式。如果设置为True,则只允许当前连接的消费者订阅该队列;如果设置为False,则允许多个消费者订阅该队列。 5. `consumer_tag`:指定消费者的标签。可以用于取消订阅时的标识。 6. `arguments`:可选参数,用于设置额外的参数。 下面是一个示例代码,演示了如何使用`channel.basicConsume`方法发送消息: ```python import pika def callback(ch, method, properties, body): # 处理接收到的消息 print("Received message:", body.decode()) # 手动确认消息的接收 ch.basic_ack(delivery_tag=method.delivery_tag) # 建立与RabbitMQ服务器的连接 connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() # 声明一个队列 channel.queue_declare(queue='my_queue') # 订阅队列并消费消息 channel.basicConsume(queue='my_queue', on_message_callback=callback, auto_ack=False) # 开始接收消息 channel.start_consuming() ``` 在上面的示例中,我们首先建立与RabbitMQ服务器的连接,然后声明一个队列。接下来,使用`channel.basicConsume`方法订阅队列,并指定一个回调函数`callback`来处理接收到的消息。最后,调用`channel.start_consuming`方法开始接收消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值