首页 > 解决方案 > DirectMessageListenerContainer:如何处理 RabbitMQ 中的队列删除?

问题描述

我正在使用DirectMessageListenerContainer来自 RabbitMQ 的数据。以下是我的场景:

我有两个与 RabbitMQ 交互的模块。第一个模块创建和删除队列,而第二个模块DirectMessageListenerContainer监听 RabbitMQ 中的队列。

每当在 RabbitMQ 中删除任何队列时,都会DirectMessageListenerContainer开始不断抛出异常并尝试连接到已删除的队列。

我的问题是,有什么方法可以处理异常并对其执行操作?

标签: spring-bootrabbitmqspring-amqp

解决方案


当您删除一个模块中的队列时,您可以安排从容器中的这些队列中取消订阅。看它的方法:

/**
 * Remove queue(s) from this container's list of queues.
 * @param queueNames The queue(s) to remove.
 * @return the boolean result of removal on the target {@code queueNames} List.
 */
public boolean removeQueueNames(String... queueNames) {

ListenerContainerConsumerFailedEvent您甚至可以通过@EventiListener在第二个模块中订阅应用程序来执行相同的操作removeQueueNames。我认为Throwable应该ListenerContainerConsumerFailedEvent有一些信息,目前哪些队列不适合使用。


推荐阅读