我具有以下侦听器组件:
@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
答案 0 :(得分:0)
我对JRebel不熟悉;消费者的渠道是长期存在的,并且在容器stop()时将自动关闭。
也许重新加载发生时容器没有停止?
打开调试日志记录以查看容器/消费者/渠道的活动。
如果不清楚,请在github gist或pastebin之类的位置发布完整的DEBUG日志。
您可以获得对RabbitListenerEndpointRegistry
的引用,并尝试通过id
停止容器(给@RabbitListener
和id
)。