[英]NServiceBus events ends in timeout queue
我正在使用HandleMyEvent類處理事件
public class HandleMyEvent : IHandleMessages<MyEvent>
{
private readonly IBus _bus;
private readonly IWorkorker _workerTools;
public HandleProductInstanceEvent( IBus bus, IWorkorker worker)
{
_bus = bus;
_workerTools = worker;
}
public void Handle(IProductInstancesUpdatedEvent message)
{
var worker = new myWorker(_bus, _worker);
myWorker.DoWork(message.data);
}
}
myWorker.DoWork可以在完成之前運行最多5分鍾。
當發布者發送單個“MyEvent”時,似乎處理程序在消息在超時隊列中結束之前收到了5個事件,我猜它會在放棄之前重試5次。
在日志文件中,我可以找到此條目
NServiceBus.Unicast.Queuing.FailedToSendMessageException: Failed to send message to address: My.Bus.Service@MyServer ---> System.Messaging.MessageQueueException: Cannot enlist the transaction.
at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
at NServiceBus.Transports.Msmq.MsmqMessageSender.Send(TransportMessage message, Address address) in c:\work\3206e2123f54fce4\src\NServiceBus.Core\Transports\Msmq\MsmqMessageSender.cs:line 59
為什么我收到此錯誤?
您收到該錯誤是因為默認情況下,在NServiceBus中處理MSMQ消息會在超時為1分鍾的事務中運行。
一旦傳遞了事務超時,任何新操作(如發送消息或在數據庫中存儲內容)都將失敗
無法登記交易。
您應該將事務超時增加到超過預期處理時間或關閉此端點上的事務 。
請注意,運行5分鍾的消息處理程序很長時間。 在這么長的時間內對交易資源進行交易並因此鎖定並不是最佳的。
一旦消息處理失敗,事務就會回滾,將消息放回隊列中。 然后,重試您已配置的許多第一級重試嘗試。 在您的方案中最有可能是5。 之后,它將被移至二級重試。
.timeout隊列是負責處理二級重試的超時管理器的輸入隊列。 如果未立即從此隊列中獲取消息,則表明您未在該端點上運行超時管理器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.