跳至主内容
版本:4.2

消费者优先级

概述

消费者优先级允许您确保高优先级消费者在活跃时能够收到消息,而消息只会在高优先级消费者被阻塞时才发送给低优先级消费者。

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

活跃消费者的定义

以上段落将消费者描述为活跃阻塞。在任何时刻,任何给定的消费者要么是活跃的,要么是阻塞的。活跃消费者是指能够接收消息而无需等待的消费者。当一个消费者无法接收消息时,它就会被阻塞——可能是因为其通道在发出 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 的新消费者。

© . This site is unofficial and not affiliated with VMware.