结合重试,Curcuit断路器和延迟的计划交付

问题描述

我正在努力测试这种情况,并且无法真正匹配数字。您能否在以下情况下验证此配置是否正确?

当消息第一次到达消费者时,想要重试这些异常WebException,HttpRequestException,RequestTimeoutException,TimeoutException。重试用尽后,我想使用延迟交换重新传递这些消息(仅适用于上述例外情况),间隔时间为2分钟,然后是4分钟,最后是6分钟,并在3次之后停止重新传递并推送到_error队列。>

我希望UseMessageRetry()应该只在第一次执行,而不是在每次通过延迟交换将消息传递给使用者时都不执行。

cfg.UseDelayedExchangeMessageScheduler();
cfg.ReceiveEndpoint(rabbitMqConfig.QueueName,e =>
{
e.PrefetchCount = 20;
e.UseRateLimit(100,TimeSpan.FromMinutes(3));
e.UseDelayedRedelivery(p =>
{
p.Intervals(TimeSpan.FromMinutes(2),TimeSpan.FromMinutes(4),TimeSpan.FromMinutes(6));
});
e.UseCircuitBreaker(cb =>
{
cb.TrackingPeriod = TimeSpan.FromMinutes(1);
cb.TripThreshold = 15;
cb.ActiveThreshold = 10;
cb.ResetInterval = TimeSpan.FromMinutes(5);
});
e.UseMessageRetry(r =>
{
r.Incremental(2,TimeSpan.FromSeconds(3),TimeSpan.FromSeconds(6));
r.Handle<WebException>();
r.Handle<HttpRequestException>();
r.Handle<TimeoutException>();
r.Handle<RequestTimeoutException>();
});
e.Consumer<Consumers.ProductConsumer>(provider);
});

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)