首页 > 解决方案 > 在销毁之前关闭@RabbitListener 频道

问题描述

我有以下侦听器组件:


@Component
public class Receiver {

    @RabbitListener(queues = "fmd-response")
    public void receiveMessage(Response response, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {
        channel.basicAck(tag, false);
    }

    @PreDestroy
    public void preDestroy() {

    }
}

preDestroy()为了关闭加载组件时自动创建的通道应该放入什么?我需要这个来使用 JRebel 重新加载组件,因为每次重新加载都会创建一个新通道:


127.0.0.1:54916 (1)
guest       idle    0   250 0               
127.0.0.1:54916 (2)
guest       idle    0   250 0               
127.0.0.1:54916 (3)
guest       idle    0   250 0               
127.0.0.1:54916 (4)
guest       idle    0   250 0               
127.0.0.1:54916 (5)
guest       idle    0   250 0               
127.0.0.1:54916 (6)
guest       idle    0   250 0

标签: rabbitmqspring-rabbitjrebel

解决方案


我不熟悉 JRebel;消费者的通道是长期存在的,当容器停止时会自动关闭()。

重新加载发生时,容器可能没有停止?

打开调试日志以查看容器/消费者/通道的活动。

如果不清楚,请将完整的调试日志发布在 github gist 或 pastebin 之类的地方。

您可以获得对的引用并尝试通过(给出an )RabbitListenerEndpointRegistry来停止容器 。id@RabbitListenerid


推荐阅读