我们有这样的设置,我们调用webservice来创建队列,并从响应中接收队列名称。
然后我们设置一个SimpleMessageListenerContainer并在那里设置队列名称,然后启动它。
但是,有时会删除队列 - 导致“ 404无法声明队列XXXXXXXXX ”错误。在这些情况下,我需要再次调用webservice并将新的QueueName添加到SimpleMessageListenerContainer,然后删除旧的。
我想通过触发任何代码来解决这个问题的唯一方法是创建一个自定义的CachedConnectionFactory并覆盖shutdownCompleted方法。
但是,当SimpleMessageListenerContainer切换时,shutdownCompleted似乎会触发,因此它会粘在一个循环中。如果触发器是从服务器外部或从处理新队列的客户端发送到shutdownCompleted的ShutdownSignalException似乎没有任何不同,所以我无法弄清楚如何跳过“第二次”去处理。
那么当服务器杀死队列时检测和运行自定义处理的常用方法是什么?
答案 0 :(得分:0)
当侦听器失败时,容器会发布ListenerContainerConsumerFailedEvent
。
添加ApplicationListener<ListenerContainerConsumerFailedEvent>
,停止容器,更改队列并重新启动。
您可能会收到多个事件,因为默认情况下,容器会在放弃和停止之前尝试重新连接3次。