我有一个这样定义的匿名和独占队列:
@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();
}
Run Code Online (Sandbox Code Playgroud)
有时我在rabbitmq日志中收到此错误:
=错误报告===== 2016年4月12日:: 15:13:42 ===连接<0.6899.0>上的通道错误(XX.XXX.57.174:51716-> 192.168.100.145:5671,虚拟主机:' /',用户:'XXXX_USER'),频道1:{amqp_error,resource_locked,“无法获得对虚拟主机'/'中锁定队列'XXXX_USER-broad-1457bb43-6487-4252-b21a-a5a92d19e0dc'的独占访问”,“队列” 。宣布'}
因此,客户端无法声明队列,也无法从AMQP服务器接收消息。
在此消息之后发生:
=警告报告==== 2016年4月12日:: 15:11:51 ===关闭AMQP连接<0.6810.0>(XX.XXX.57.174:17959-> 192.168.100.145:5671):connection_closed_abruptly
=信息报告==== 2016年4月12日:: 15:13:41 ===接受AMQP连接<0.6899.0>(XX.XXX.57.174:51716-> 192.168.100.145:5671)
我无法重现它(我曾尝试关闭Rabbitmq的连接并拔下网络电缆,但应用程序再次重新连接良好),所以我不知道为什么会这样。假设在连接关闭时删除了专用队列和专用队列,为什么会这样呢?如何捕获此异常并从中恢复?
谢谢
我有一个带有两个 ConnectionFactory(不同的代理)的应用程序。它们配置了 java 类:
@Bean
public ConnectionFactory ...
@Bean
public Queue ...
...
Run Code Online (Sandbox Code Playgroud)
在 rabbittemplate 中,您可以指示连接,但不能在队列或交换中指示,因此它们是在两个连接中创建的。我是否必须仅使用 RabbitAdmin 在两个连接之一中创建队列?还有其他方法吗?