Закройте канал @RabbitListener перед уничтожением - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть следующий компонент слушателя:


@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 голосов
/ 16 декабря 2018

Я не знаком с JRebel;канал для потребителя является долгоживущим и будет автоматически закрыт при остановке контейнера ().

Возможно, контейнер не остановлен при перезагрузке?

Включите ведение журнала DEBUG, чтобы увидеть активность для контейнера / потребителя / канала.

Если из этого не ясно, опубликуйте полный журнал DEBUG где-нибудь, например, в github gist или pastebin.

Вы можете получить ссылку на RabbitListenerEndpointRegistry и попробовать остановить контейнер на id (дать @RabbitListener и id).

...