Мы используем RabbitMQ и MassTransit в качестве нашей инфраструктуры обмена сообщениями в нашем приложении.
У меня есть сценарий, когда моему потребителю нужно на время прекратить обработку сообщений, а затем перезапустить на более позднем этапе.
Я могу успешно остановить шину, и потребитель прекращает обработку дальнейших сообщений, но когда я перезагружаю шину, он говорит, что шина уже запущена, но потребитель больше не будет принимать сообщения для дальнейшей обработки
Пример кода выглядит как
var iBusControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host = cfg.Host(new Uri("rabbitmq://localhost"), h =>
{
h.Username("guest");
h.Password("guest");
});
if (linkConsumer)
cfg.ReceiveEndpoint("TestMessage_Queue", x =>
{
x.Consumer<TestMessageConsumer>();
});
});
iBusControl.Start();
// Consumer starts processing messages
// later on in the code I call stop on the same bus instance
iBusControl.Stop();
// Consumer stops processing messages
// later on in the code I call start again on the bus instance
iBusControl.Start();
// Masstransit also says, bus already started
// But the consumer won't pick up any further messages for processing.
Шина, если я создаю новый экземпляр шины, такой же, как первый блок моего кода, и запускаю на нем вызов, он правильно подключится к потребителю, и обработка сообщения начнется снова. Несколько вопросов / путаницы
- Это ожидаемое поведение?
- Останавливает ли остановка шины всю конфигурацию конечной точки приема?
- Почему я не могу запустить автобус после его остановки?
Использование MassTransit 5.3.3 с RabbitMQ 3.6.14 Erlang 20.1