Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rabbitmq 在spring引导中使用路由密钥和exchange使用DirectExchange消息_Rabbitmq_Spring Rabbit - Fatal编程技术网

Rabbitmq 在spring引导中使用路由密钥和exchange使用DirectExchange消息

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

我正在尝试使用退出队列中的消息,该队列类型为直接Exchange(在Exchange和路由密钥的帮助下创建)。我只有交换名称路由键,而没有队列名称。有对纯Java的支持,但在Spring boot中找不到它

@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
。谢谢,它可以工作……)从下一次开始,我将把它作为一个问题发布@加里·拉塞尔