gpt4 book ai didi

重新使用 MSMQ : Erratic delivery-time

转载 作者:行者123 更新时间:2023-12-02 21:23:50 28 4
gpt4 key购买 nike

我们将 Rebus 与 MSMQ 一起用于应用程序组件之间基于消息的通信。这些组件都在同一台机器上运行。

消息发送和接收之间的时间通常保持在一秒以下。但是如果系统空闲一分钟左右(意味着没有消息被发送),接下来的一两条消息有时需要大约五秒钟才能传递。 MSMQ 性能计数器显示这些消息在那段时间内留在队列中。

对于我们的应用程序,希望消息具有恒定的传递时间(低于一秒)。

这种行为的原因可能是什么?有没有办法影响 MSMQ 或 Rebus 中的消息传递时间?我们是否应该选择其他运输方式以获得更稳定的交货时间?

最佳答案

默认情况下,Rebus 会根据 BackoffBehavior 中的时间跨度逐渐停止对队列的轮询。 - 如您所见,如果空闲时间足够长,它将每 5 秒轮询一次队列。

您可以通过以下方式更改为低延迟退避策略

Configure.With(...)
.(...)
.Behavior(b => b. SetLowLatencyBackoffBehavior())
.(...)

在配置拼写中。


更新:在 Rebus 的更高版本(即版本 >= 2)中,可以像这样自定义退避时间:

Configure.With(...)
.(...)
.Options(o => {
o.SetBackoffTimes(
TimeSpan.FromMilliseconds(100),
TimeSpan.FromMilliseconds(200),
TimeSpan.FromSeconds(1)
);
})

在这种情况下,在空闲运行的前两秒以 100 毫秒和 200 毫秒的间隔进行轮询,然后在其余时间以 1 秒的间隔进行轮询。

如果这个级别的定制还不够,ISyncBackoffStrategy可以通过 o.Register<ISyncBackoffStrategy>(c => new YourOwn SyncBackoffStrategy()) 来实现和使用在.Options上面的配置器。

关于重新使用 MSMQ : Erratic delivery-time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990314/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com