消费者优先级允许您确保高优先级消费者在活跃时能收到消息。

通常,连接到队列的活动消费者会以循环方式接收消息。当使用消费者优先级时,如果多个活动消费者具有相同的最高优先级,则消息将以循环方式传递。

只有当高优先级消费者没有可用信用来消费消息,或者这些高优先级消费者拒绝接受消息(例如,因为消息不符合与消费者关联的任何选择器的标准)时,消息才会发送到低优先级消费者。

如果消费者没有设置优先级,则使用默认优先级 **0**。

1. 核心

1.1. JMS 示例

使用 JMS 客户端时,您可以通过在创建消费者使用的目的地时使用地址参数来设置要使用的优先级。

Queue queue = session.createQueue("my.destination.name?consumer-priority=50");
Topic topic = session.createTopic("my.destination.name?consumer-priority=50");

consumer = session.createConsumer(queue);

优先级值的范围是 -231 到 231-1。

2. OpenWire

2.1. JMS 示例

使用目的地选项设置消费者的优先级,如下所示

queue = new ActiveMQQueue("TEST.QUEUE?consumer.priority=10");
consumer = session.createConsumer(queue);

由于 OpenWire 的限制,优先级值的范围是:0 到 127。最高优先级是 127。

3. AMQP

在 AMQP 1.0 中,消费者的优先级在连接帧的属性映射中设置,其中代理端点代表连接的发送端点。

条目的键必须是字面字符串 priority,条目的值必须是 -231 到 231-1 范围内的整数。