【发布时间】:2016-08-05 21:41:02
【问题描述】:
我有一个这样定义的匿名和独占队列:
@Bean
public SimpleMessageListenerContainer responseMessageListenerContainer(){
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(simpleRoutingConnectionFactory());
container.setQueues(responseAnonymousQueue());
container.setMessageListener(rabbitTemplate());
container.setAcknowledgeMode(AcknowledgeMode.AUTO);
container.setMessageConverter(jsonMessageConverter());
return container;
}
@Bean
public Queue responseAnonymousQueue() {
return new MyAnonymousQueue();
}
有时我会在 rabbitmq 日志中收到此错误:
=错误报告==== 2016 年 4 月 12 日::15:13:42 === 连接 时出现通道错误 (XX.XXX.57.174:51716 -> 192.168.100.145:5671, 虚拟主机:'/',用户:'XXXX_USER'),频道 1: {amqp_error,resource_locked, “无法在 vhost '/' 中获得对锁定队列 'XXXX_USER-broad-1457bb43-6487-4252-b21a-a5a92d19e0dc' 的独占访问权限”, 'queue.declare'}
所以客户端无法声明队列,也无法接收来自 AMQP 服务器的消息。
它发生在这条消息之后:
=警告报告==== 2016 年 4 月 12 日::15:11:51 === 关闭 AMQP 连接 (XX.XXX.57.174:17959 -> 192.168.100.145:5671): connection_close_abruptly
=INFO REPORT==== 12-Apr-2016::15:13:41 === 接受 AMQP 连接 (XX.XXX.57.174:51716 -> 192.168.100.145:5671)
我无法重现它(我尝试关闭rabbitmq的连接并移除网线,但应用程序再次连接良好),所以我不知道为什么会发生这种情况。 假设私有队列和独占队列随着连接的关闭而被删除,那么为什么会发生这种情况呢?如何捕获此异常并从中恢复?
谢谢
【问题讨论】:
标签: spring spring-amqp