使用C#stan.client的Nats流重新交付问题

时间:2019-02-28 11:09:27

标签: c# nats-streaming-server

我正在使用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条消息,则第二条总是重新发送。

我怎么了?

1 个答案:

答案 0 :(得分:0)

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

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

AckWait为30秒,延迟为40秒,很可能会发生这种情况。

我解决了通过StanSubscriptionOptions增加AckWait的问题。 选项。