Rabbitmq 在spring引导中使用路由密钥和exchange使用DirectExchange消息
我正在尝试使用退出队列中的消息,该队列类型为直接Exchange(在Exchange和路由密钥的帮助下创建)。我只有交换名称和路由键,而没有队列名称。有对纯Java的支持,但在Spring boot中找不到它Rabbitmq 在spring引导中使用路由密钥和exchange使用DirectExchange消息,rabbitmq,spring-rabbit,Rabbitmq,Spring Rabbit,我正在尝试使用退出队列中的消息,该队列类型为直接Exchange(在Exchange和路由密钥的帮助下创建)。我只有交换名称和路由键,而没有队列名称。有对纯Java的支持,但在Spring boot中找不到它 @RabbitListener @RabbitHandler public void consumeMessage(Object message) { LOGGER.debug("Message Consumed.... : {}", message.toS
@RabbitListener
@RabbitHandler
public void consumeMessage(Object message) {
LOGGER.debug("Message Consumed.... : {}", message.toString());
}
我如何使用路由密钥和交换名称而不是队列名称的消息,因为
@RabbitListener
要求队列消费者从队列而不是交换中消费。必须使用路由密钥将队列绑定到exchange
编辑
有几种方法可以在代理上自动声明队列
@RabbitListener(绑定=
@QueueBinding(exchange=@exchange(“myExchange”),
key=“myRk”,value=@Queue(“”))
公共void侦听(字符串输入){
系统输出打印项次(输入);
}
这将绑定一个匿名队列(自动删除),该队列将在应用程序停止时删除
@RabbitListener(绑定=
@QueueBinding(exchange=@exchange(“myExchange”),
key=“myRk”,value=@Queue(“foo”))
公共void侦听(字符串输入){
系统输出打印项次(输入);
}
将使用路由密钥将永久队列foo
绑定到exchange
您还可以简单地为队列、交换和绑定声明#Bean
s
请参阅。对于直接交换,路由键是队列名称。@theMayer@RabbitListener(queues=“${routing.key}”)@RabbitHandler public void consumerMessage(Object message){LOGGER.debug(“message consumered…”,message.toString());}
这是一个异常404-回复代码=404,reply text=NOT_FOUND-no queue
您声明了队列吗?我只提供了Exchange名称和路由密钥,而不是队列名称。因此,您需要使用路由密钥将队列绑定到该Exchange,然后从该队列消费。谢谢@Gary Russel。还有一个问题-如果连接或频道出现任何中断,我们是否有继续尝试RMQ连接的规定?您每次都应该问一个新问题-评论中的新问题不能帮助人们找到答案。在使用者端,侦听器容器将尝试每5秒重新连接一次(默认情况下)。在producer端,您可以将适当配置的RetryTemplate
添加到RabbitTemplate
。谢谢,它可以工作……)从下一次开始,我将把它作为一个问题发布@加里·拉塞尔