我对以下退避政策有疑问:
1它既可以用于发布者(入队消息)又可以用于订户(出队消息)吗?
2 Rebus Backoff policy与Polly's Retry相同吗?但是下面的描述提到了空闲时间,我有点困惑。
//
// Summary:
// Configures the timespans to wait when backing off polling the transport during
// idle times. backoffTimes must be a sequence of timespans, which indicates the
// time to wait for each second elapsed being idle. When the idle time exceeds the
// number of timespans, the last timespan will be used.
public static void SetBackoffTimes(this OptionsConfigurer configurer, params TimeSpan[] backoffTimes);
Configure.With(...)
.(...)
.Options(o => {
o.SetBackoffTimes(
TimeSpan.FromMilliseconds(100),
TimeSpan.FromMilliseconds(200),
TimeSpan.FromSeconds(1)
);
})
.Start();
3 Rebus是否支持Polly扩展?例如,指数回退加上底部的抖动
Random jitterer = new Random();
Policy
.Handle<HttpResponseException>() // etc
.WaitAndRetry(5, // exponential back-off plus some jitter
retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt))
+ TimeSpan.FromMilliseconds(jitterer.Next(0, 100))
);
4我在最新的Rebus螺母上找不到ISyncBackoffStrategy
。已弃用吗?
Configure.With(...)
.(...)
.Options(o => {
o.Register<ISyncBackoffStrategy>(c => {
var strategy = new MyOwnBackoffStrategy();
return strategy;
});
})
.Start();
答案 0 :(得分:0)
Rebus的退避策略仅由消息使用者使用,因此可以减轻工作量。
这与RETRY无关,而更多地是关于在安静的时候在CPU上变得容易。
文档中的“空闲时间”一词仅表示“没有收到任何消息的时间”。因此,只要队列中有消息,Rebus就会以您可以处理的速度尽快处理消息,但是如果队列突然变空,则它将逐渐越来越少地轮询。
您可以通过实现IBackoffStrategy
来实现自己的退避策略(这就是现在所说的,我已经相应地更新了Wiki)。