我正在使用RabbitMQ / Spring / Spring AMQP构建应用程序,并且在处理排队方式时遇到麻烦。
基本上,我有一个队列,每个消费者都在听,每个消息基本上都说“该队列已准备好由单个消费者处理”。然后,使用者将收听消息中指示的队列,使用该队列中的所有消息,并在完成后最终将其删除。
这些短暂的队列都是在处理数据时动态创建的,不能被多个使用者使用(无论谁在“就绪”队列中获取消息)。
在这种情况下,我无法很好地与消费者打交道。现在,每当消费者从“就绪”队列中收到一条消息时,我就创建一个新的DirectMessageListenerContainer
,然后在获得所需的所有消息后立即停止它。看来此解决方案并不理想。使用Spring AMQP / RabbitMQ是否有更好的方法来处理这种情况?
您可以在运行时在现有容器中添加/删除队列;使用直接容器更有效(请参见Choosing a container)。
MessageProperties
具有consumerQueue
属性,可以告诉您消息来自哪个队列。