2016-11-30 51 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中的清潔劑,尚未發佈。