跳到主要内容
版本: 4.1

消费者优先级

概述

消费者优先级允许您确保高优先级消费者在激活状态时接收消息,只有当高优先级消费者阻塞时,消息才会发送给较低优先级的消费者。

通常,连接到队列的活动消费者以轮询方式从队列接收消息。当使用消费者优先级时,如果存在多个具有相同高优先级的活动消费者,则消息以轮询方式传递。

活动消费者的定义

以上段落将消费者称为活动阻塞。在任何时刻,任何给定的消费者都是两者之一。活动消费者是指可以无需等待即可接收消息的消费者。如果消费者无法接收消息,则会变为阻塞状态 - 因为其通道在发出 basic.qos 后已达到最大未确认消息数,或者仅仅是因为网络拥塞。

因此,对于每个队列,以下三件事中至少有一件必须为真

  1. 没有活动消费者
  2. 队列为空
  3. 队列正忙于向消费者传递消息

请注意,消费者可以在活动和阻塞状态之间每秒切换多次。因此,我们不会通过管理插件或 rabbitmqctl 公开消费者是活动状态还是阻塞状态。

当使用消费者优先级时,您可以期望最高优先级的消费者接收所有消息,直到它们变为阻塞状态,此时较低优先级的消费者将开始接收一些消息。重要的是要理解,RabbitMQ 仍然会优先传递消息 - 如果有活动的较低优先级消费者准备就绪,它不会等待高优先级阻塞的消费者变为非阻塞状态。

使用消费者优先级

basic.consume 方法中将 x-priority 参数设置为整数值。未指定值的消费者的优先级为 0。较大的数字表示更高的优先级,并且可以使用正数和负数。

例如(在 Java 中)

Channel channel = ...;
Consumer consumer = ...;
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-priority", 10);
channel.basicConsume("my-queue", false, args, consumer);

这将创建一个优先级为 10 的新消费者。

© . All rights reserved.