销毁前关闭@RabbitListener通道

时间:2018-12-16 15:47:20

标签: rabbitmq spring-rabbitmq jrebel

我具有以下侦听器组件:


@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

1 个答案:

答案 0 :(得分:0)

我对JRebel不熟悉;消费者的渠道是长期存在的,并且在容器stop()时将自动关闭。

也许重新加载发生时容器没有停止?

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

如果不清楚,请在github gist或pastebin之类的位置发布完整的DEBUG日志。

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