中继回退和Polly支持

时间:2019-05-16 00:13:07

标签: rebus rebus-azureservicebus

我对以下退避政策有疑问:

1它既可以用于发布者(入队消息)又可以用于订户(出队消息)吗?

2 Rebus Backoff policyPolly'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)) 
  );

https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/implement-resilient-applications/implement-http-call-retries-exponential-backoff-polly

4我在最新的Rebus螺母上找不到ISyncBackoffStrategy。已弃用吗?

 Configure.With(...)
        .(...)
        .Options(o => {
            o.Register<ISyncBackoffStrategy>(c => {
                var strategy = new MyOwnBackoffStrategy();
                return strategy;
            });
        })
        .Start();

https://github.com/rebus-org/Rebus/wiki/Back-off-strategy

1 个答案:

答案 0 :(得分:0)

Rebus的退避策略仅由消息使用者使用,因此可以减轻工作量。

这与RETRY无关,而更多地是关于在安静的时候在CPU上变得容易。

文档中的“空闲时间”一词仅表示“没有收到任何消息的时间”。因此,只要队列中有消息,Rebus就会以您可以处理的速度尽快处理消息,但是如果队列突然变空,则它将逐渐越来越少地轮询。

您可以通过实现IBackoffStrategy来实现自己的退避策略(这就是现在所说的,我已经相应地更新了Wiki)。