使用 C# 的 Nats 流式重新传送问题 stan.client
Nats streaming redelivery problems with c# stan.client
我正在使用 nats streaming server and 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 条消息,第二条总是重新发送。
我的错误是什么?
第一条消息一收到就确认,不会重发。
如果第二条消息被传送到客户端库并在您的回调处理之前过期,NATS 流媒体服务器将重新传送它。
有 30 秒的 AckWait 和 40 秒的延迟,这很可能发生。
我解决了通过 StanSubscriptionOptions.AckWait 增加 AckWait
选项。
我正在使用 nats streaming server and 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 条消息,第二条总是重新发送。
我的错误是什么?
第一条消息一收到就确认,不会重发。
如果第二条消息被传送到客户端库并在您的回调处理之前过期,NATS 流媒体服务器将重新传送它。
有 30 秒的 AckWait 和 40 秒的延迟,这很可能发生。
我解决了通过 StanSubscriptionOptions.AckWait 增加 AckWait 选项。