我正在创建一个应用程序,该应用程序使用 RabbitMQ 向消费者发送消息以进行耗时的处理。但是,我需要对消息进行优先级排序。当高优先级的消息到达时,即使所有消费者实例都在处理其他消息,也必须处理该消息。
AFAIK 在 Spring Boot 和 RabbitMQ 中不可能抢占处理低优先级消息并切换到处理高优先级消息。
是否可以创建仅接受高优先级消息的消费者,或者在所有其他繁忙且高优先级消息到达时动态运行额外的消费者组?
我尝试使用 x-max-priority=10 标志添加队列并增加消费者数量,但这并不能解决我的问题。
想象一下,我们运行 50 个消费者并发送 50 条低优先级消息。当执行耗时的处理时,一条新消息以高优先级到达,但无法立即处理,因为所有 50 个消费者都忙。
配置中有一部分设置了消费者的数量
@Bean
public SimpleRabbitListenerContainerFactory
rabbitListenerContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,
@Qualifier("rabbitConnectionFactory") ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory);
factory.setConcurrentConsumers(50);
factory.setMaxConcurrentConsumers(100);
return factory;
}
有没有办法创建一组接受消息高优先级消息(例如高于0)的消费者或为高优先级消息动态创建消费者?
手掌心
慕少森
相关分类