RabbitMQ - внутренний канал DefaultConsumer - PullRequest
0 голосов
/ 20 ноября 2018

Учитывая следующий код:

   public void doSomething(Channel channel1){
        DefaultConsumer consumer1 = new DefaultConsumer(channel1).
        channel1.basicConsume("Queue1Name",..., "Consumer1Tag", consumer1)
}

Если channl1 get отключен по какой-то причине, что приведет к тому, что сообщения не будут использоваться (?):

  1. Может ли тот же потребительinstanse (consumer1) будет использоваться каким-либо образом с другим каналом или требуется новый экземпляр и новый канал?
  2. Узнает ли обновление Queue1Name о каких-либо изменениях?т.е. -
    DeclareOk queueResponse = someOtherChannel.queueDeclare("Queue1Name", ........); int consumerCount = queueResponse.getConsumerCount()

Что будет подсчетом потребителей?

Причина этого вопроса в том, что у меня запущен фоновый поток, и я проверяю соединение с RabbitMQ один раз вкакое-то время.Я проверяю, открыты ли каналы и соединения, а в случае, если они не открыты - я их сбрасываю.Я хочу оставить единственного потребителя в очереди 1 и по-прежнему иметь возможность обрабатывать сценарии, когда обнаруживаю, что его канал закрыт.

1 Ответ

0 голосов
/ 20 ноября 2018

Если канал 1 отключен, его сообщения не будут использоваться, это правильно.Они останутся в очереди.

  1. Да, вы можете повторно подключиться к той же очереди, оставленные сообщения должны быть обработаны, прежде чем вы сможете получать новые сообщения.
  2. Я думаю, вам нужно удалить очередьпрежде чем вы сможете сделать новый с тем же именем (я не уверен на 100%).Количество потребителей должно быть 1 после повторного подключения.Но если вы сделаете это, все сообщения, оставленные в очереди, будут потеряны.

Вы действительно должны попробовать это сами в своем приложении и наблюдать за поведением.

...