Проблемы потоковой передачи Nats с c # stan.client - PullRequest
0 голосов
/ 28 февраля 2019

Я использую потоковый сервер 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 сообщения, второе всегда доставляется.

В чем моя ошибка?

1 Ответ

0 голосов
/ 09 августа 2019

Первое сообщение будет подтверждено сразу после его получения, поэтому не будет повторно отправлено.

Если второе сообщение доставляется в клиентскую библиотеку и срок его действия истекает до того, как оно будет обработано вашим обратным вызовом, потоковый сервер NATS отправит его повторно.

С 30-секундным AckWait и 40-секундной задержкой это очень вероятно произойдет.

Я решил увеличить AckWait с помощью опции StanSubscriptionOptions.AckWait.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...