Обнаружение потерянного соединения в узле публикации и изменения RabbitMQ - PullRequest
0 голосов
/ 01 января 2019

Я разрабатываю очень простое приложение, используя RabbitMQ.Одна машина, несколько очередей и обменов, один издатель и один потребитель.После прочтения о Clustering и HA я подключаю второй компьютер для создания кластера, кроме того, я отражаю очереди, чтобы иметь хотя бы одну реплику.Теперь, когда я хочу опубликовать некоторые данные в очереди, я использую первую машину в качестве своего хоста, и она работает нормально, но если служба RabbitMQ первой машины не работает, мое приложение не работает.
У меня вопрос, как узнать, какая машина настроена для создания соединения и как изменить хост при публикации сообщений?

ОБНОВЛЕНИЕ
Я использую одну из CreateConnection перегрузокпередать все мои хосты для создания соединения.ОК, это решит проблему поиска доступной машины для создания соединения.Но второй вопрос все еще там, посмотрите на код ниже:

for(int i = 0, i < 300, i++){
    var message = string.Format("Message #{0}: {1}", i, Guid.NewGuid());
    var messageBodyTypes = Encoding.UTF8.GetBytes(message);
    channel.BasicPublish(ExchangeName, "123456", null, messageBodyBytes);
}

Эти строки кода работают идеально, когда соединение в порядке, но предположим, что в середине публикации сообщений наобмен, служба неожиданно остановилась, затем в этом случае сначала System.IO.FileLoadException поднял и если я продолжу выполнение RabbitMQ.Client.Exceptions.AlreadyClosedException поднял, что говорит:

Уже закрыт: операция AMQP была прервана: AMQP закрыть-причина, инициированная Peer, code = 320, text = "CONNECTION_FORCED - принудительное закрытие соединения брокером с причиной 'shutdown'", classId = 0, methidId = 0, причина =

Я думаю, что долженбыть способом изменить хост, когда соединение закрыто во время публикации сообщений, но как, не IDEA!

1 Ответ

0 голосов
/ 02 января 2019

Эти строки кода прекрасно работают, когда соединение в порядке, но предположим, что в середине публикации сообщений на обмен служба неожиданно остановилась, затем в этом случае сначала возникает исключение System.IO.FileLoadException, и еслиЯ продолжаю выполнение RabbitMQ.Client.Exceptions.AlreadyClosedException, которое говорит:

Вы должны закрыть канал и текущее соединение и открыть новое в каждой средней петле.Это должно использовать другое соединение.Это необходимо делать только при обнаружении исключения, а не на каждой итерации цикла.


ПРИМЕЧАНИЕ: команда RabbitMQ контролирует rabbitmq-users список рассылки и только иногда отвечает на вопросы по StackOverflow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...