У меня есть микросервис с использованием MassTransit для обработки сообщений из очереди RabbitMQ. Однако у меня возникает проблема, когда при ошибке MassTransit повторно обрабатывает сообщение, и/или сообщение остается в очереди.
Код: Выделить всё
/* inside the configuration method */
services.AddMassTransit(scbc =>
{
/* ... */
scbc.UsingRabbitMq((context, rmbfc) =>
{
/* ... */
rmbfc.UseMessageRetry(r => {
r.Immediate(0);
r.Handle();
r.None();
});
rmbfc.UseDelayedRedelivery( r => {
r.Immediate(0);
r.Handle();
r.None();
});
rmbfc.UseRetry(r => {
r.Immediate(0);
r.Handle();
r.None();
});
rmbfc.ReceiveEndpoint(r => {
r.DiscardFaultedMessages();
r.DiscardSkippedMessages();
});
});
});
Как вы можете видеть, я активирую практически каждую настройку, которая, кажется, будет предотвратить повторные извлечения, (документация абсолютно ужасна,), и все же мой микросервис сохраняет более мереинику Обработка () и почти все остальные настройки, которые кажется актуальным.
Как я могу это сделать? Это кажется достаточно простым: я не могу быть первым человеком в мире, ищет политику повторения «не повторно ничего».
предложение вокруг всего тела метода моего потребителя и поймайте каждую ошибку, делая ручную ведение журнала/телеметрию ошибки, а не полагаться на MassTransit's. Затем я установил тайм -аут на MassTransit, который короче, чем время потребительского тайм -аута на Rabbitmq.>
Подробнее здесь:
https://stackoverflow.com/questions/797 ... d-rabbitmq