Проблемы потоковой передачи 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.

Другие вопросы по тегам