Storm使用Spring AMQP从RabbitMq读取消息

Storm使用Spring AMQP从RabbitMq读取消息,rabbitmq,spring-amqp,apache-storm,spring-rabbit,Rabbitmq,Spring Amqp,Apache Storm,Spring Rabbit,我想从rabbitMq队列中使用Storm Spout中的消息 现在,我们使用Spring AMQP异步发送和接收来自RabbitMq的消息 Spring AMQP提供了从队列读取消息的机制(创建侦听器或使用注释@RabbitListner) 问题是我可以让一个侦听器从队列中读取消息。但是,我如何将此消息发送到风暴群上运行的风暴喷口 拓扑将启动集群,但在我的spout的nextTuple()方法中,我需要从这个队列读取消息。这里可以使用Spring AMQP吗 我已将侦听器配置为从队列中读取消息

我想从rabbitMq队列中使用Storm Spout中的消息

现在,我们使用Spring AMQP异步发送和接收来自RabbitMq的消息

Spring AMQP提供了从队列读取消息的机制(创建侦听器或使用注释@RabbitListner)

问题是我可以让一个侦听器从队列中读取消息。但是,我如何将此消息发送到风暴群上运行的风暴喷口

拓扑将启动集群,但在我的spout的nextTuple()方法中,我需要从这个队列读取消息。这里可以使用Spring AMQP吗

我已将侦听器配置为从队列中读取消息:

@RabbitListener(queues = "queueName")
public void processMessage(QueueMessage message) {

} 
如何将侦听器接收到的上述消息发送到集群上运行的my spout

或者,喷口的nextTuple()方法中如何包含此方法?可能吗


我在这里使用Java作为一种语言。

通过使用
rabbitmplate
receive
receiveAndConvert
方法之一,您可以按需阅读消息(而不是被消息驱动)

默认情况下,如果队列中没有消息,它们将返回null

编辑


如果您设置了
receiveTimeout
(在1.5版或更高版本中提供),则receive方法将在该时间内阻塞(它在内部使用异步使用者,不轮询)


但是它仍然没有侦听器那么有效,因为每个方法都会创建一个新的使用者;要使用侦听器,您需要使用
nextTuple()
(例如
BlockingQueue
)中的一些内部阻止机制来等待消息。

感谢Gary的回答。我有两个问题:1)我相信Receive或ReceiveandConvert会继续轮询队列以检查是否有消息。投票时间是多少?我在这里使用ApacheStorm进行实时处理,期望消息在队列中可用时立即交付。不确定轮询是否是正确的方法,因为我们关心的是实时性。此外,队列中可能会有一段时间没有消息。使用receive不会影响性能吗?如果您设置了
receiveTimeout
(在1.5或更高版本中提供),receive方法将在该时间内阻塞(它在内部使用异步使用者,不进行轮询)。我无法理解您所说的“为每个方法创建新使用者”是什么意思。如果可能的话,你能详细解释一下这句话吗?当使用阻塞接收时,模板会创建一个新的异步消费者;等待消息,然后取消消费者。监听器容器使用了一个长寿命的消费者,因此它更高效。谢谢Gary,监听器是否也在引擎盖下不断阻止接收消息?