Проблемы потоковой передачи Nats с C# stan.client
Я использую потоковый сервер nats и stan.client в качестве клиентской библиотеки.
Мой подписчик может выполнять долгую работу. Иногда они превышают время ожидания подтверждения по умолчанию (30 секунд). Поэтому я пытаюсь вручную подтвердить свое сообщение, выполнив следующее:
StanSubscriptionOptions sOpts = StanSubscriptionOptions.GetDefaultOptions();
sOpts.ManualAcks = true;
EventHandler<StanMsgHandlerArgs> msgHandler = (sender, args) =>
{
args.Message.Ack();
Thread.Sleep(40000);
};
sOpts.DurableName = "my-durable";
var s = c.Subscribe(subject, qGroup, sOpts, msgHandler);
Я установил ручное подтверждение, а затем подтвердил сообщение как первое действие перед моей работой.
В этом коде подписчик выполняет работу в течение 40 секунд. Если я отправляю 2 сообщения, второе всегда доставляется.
В чем моя ошибка?
0 ответов
Первое сообщение будет подтверждено сразу после его получения, поэтому не будет повторно отправлено.
Если второе сообщение доставлено в клиентскую библиотеку и истекает до того, как оно будет обработано вашим обратным вызовом, потоковый сервер NATS восстановит его.
С 30-секундным AckWait и 40-секундной задержкой это очень вероятно произойдет.
Я решил увеличить AckWait с помощью опции StanSubscriptionOptions.AckWait.