2016-11-30 62 views
0

我试图使用UseRetry和间隔设置使用MassTransit和Azure服务总线作为传输。 消费者代码:MassRensit的UseRetry设置间隔

public async Task Consume(ConsumeContext<ISimpleRequest> context) 
    { 
     _log.InfoFormat("Strated working on {0}", context.Message.CustomerId); 
     throw new InvalidOperationException("some error");  
    } 

请求服务:

​​

消息发送我期望能获得立即一个消息,10分钟后多了一个5分钟后,还有一后。但我立即收到了一条消息,5分钟后收到两条消息,10分钟后收到三条消息,每5分钟收到三条消息。如果这是错误,我如何编写代码来强制它像我之前说的那样工作?

回答

1

长时间重试期间的问题是您超出了Azure Service Bus的锁定超时时间。您应该使用消息重新传递而不是重试。

UseRetry() - 是一个内联重试过滤器。它在经纪人的同一交付中重试相同的消息。它意味着处理暂时的故障,如SQL超时或死锁问题。它不适用于长期重试操作。

现在配置和使用3.4.1我不确定重试计数是否集成(它们可能不是)有点棘手,但是对于每种消息类型,您可以使用计划重新发送。

x.Consumer<MyConsumer>(cfg => 
{ 
    cfg.ConfigureMessage<MyMessage>(x => x.UseScheduledRedelivery(r => r.Intervals(1000, 2000)) 
}); 

这将使用消息调度器(在Azure中,它将使用EnqueueMessageTimeUtc调度消息)。

这是3.5中的清洁剂,尚未发布。