Почему "ожидают публикации <T>" зависает / не завершается / не завершается - PullRequest
3 голосов
/ 08 марта 2019

Следующий фрагмент кода работал некоторое время и неожиданно прекратил возвращаться:

await availableChangedPublishEndpoint
   .Publish<IAvailableStockChanged>(
        AvailableStockCounter.ConvertSkuQtyToAvailableStockChangedEvent(
            newAvailable,
            absMessage.Warehouse)
        );

В ConvertSkuQtyToAvailableStockChangedEvent нет ничего умного - он просто отображает один простой класс в другой.

Мы добавили журналы до и после этого кода, и он определенно просто останавливается на этом этапе. Другие системы публикуют нормально, другие сообщения отправляются из этого приложения (например, журналы фактически отправляются через RabbitMQ). Мы повторно развернули и обновили до последней версии MassTransit. Мы видим, что сообщения публикуются - возможно, несколько раз, но этот метод Publish никогда не возвращается.

1 Ответ

1 голос
/ 08 марта 2019

У нас был сломанный узел RabbitMQ, и чистый перезапуск службы на одном узле исправил его. Я понимаю, что могут быть другие причины для такого поведения, но это была наша проблема.

systemctl restart rabbitmq-server

Заглядывая дальше в RabbitMQ, мы увидели, что некоторые из пустых очередей, которые были подключены к этому обмену, не были синхронизированы (см. Ниже), и когда мы попытались синхронизировать их, они не работали.

enter image description here

Нам также не удалось удалить некоторые из этих несинхронизированных очередей.

Мы полагаем, что эта проблема вызвала неожиданное отключение одного из узлов, однако большинство очередей / обменов остались в порядке.

...