【问题标题】:Nats streaming redelivery problems with c# stan.client使用 c# stan.client 的 Nats 流式重新传递问题
【发布时间】:2019-08-09 23:13:26
【问题描述】:

我使用nats streaming serverstan.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 条消息,则第二条始终会重新发送。

我的错误是什么?

【问题讨论】:

    标签: c# nats-streaming-server


    【解决方案1】:

    第一条消息将在收到后立即确认,因此不会重新发送。

    如果第二条消息传递到客户端库并在您的回调处理之前过期,则 NATS 流媒体服务器将重新传递它。

    如果有 30 秒的确认等待和 40 秒的延迟,这很可能会发生。

    我通过 StanSubscriptionOptions.AckWait 解决了增加 AckWait 选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 2016-07-22
      • 2020-05-01
      • 2021-11-19
      • 2017-05-22
      • 2011-11-29
      相关资源
      最近更新 更多