때때로 NServiceBus가 메시지를 받으면 아래 예외가 발생하여 실패합니다. 이로 인해 NServiceBus가 다시 시도됩니다 (최대 재시도 제한이 구성됨). 재시도 중 하나에서 메시지가 성공적으로 처리되는 경우가 있지만 동일한 재 시도로 모든 재 시도가 실패하는 것이 일반적입니다. 이 경우 메시지는 모든 재시도가 실패 할 때 예상대로 오류 대기열로 라우팅됩니다.NServiceBus : "실패한 메시지 처리 완료 이벤트 발생"원인은 무엇입니까?
내 질문은 ... 무엇이이 예외가 처음에 발생합니까? 코드가 스택 추적에 나타나지 않기 때문에 메시지 처리기 코드와 관련이없는 것 같습니다.
- NServiceBus 버전 : 2.6.0.1504
- OS : 윈도우 서버 처리기 코드는 .NET 3.5을 대상으로 2003
- 여기
전체 예외 메시지 및 스택 추적입니다 이전 :
NServiceBus.Unicast.Transport.Msmq.MsmqTransport [(null)] - Failed raising 'finished message processing' event. System.Messaging.MessageQueueException: Cannot enlist the transaction.
at System.Messaging.MessageQueue.SendInternal(Object obj, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
at System.Messaging.MessageQueue.Send(Object obj, MessageQueueTransactionType transactionType)
at NServiceBus.Unicast.Transport.Msmq.MsmqTransport.SendMsmqMessage(Message m, String destination)
at NServiceBus.Unicast.Transport.Msmq.MsmqTransport.Send(TransportMessage m, String destination)
at NServiceBus.Unicast.UnicastBus.SendReadyMessage(Boolean startup)
at NServiceBus.Unicast.UnicastBus.TransportFinishedMessageProcessing(Object sender, EventArgs e)
at NServiceBus.Unicast.Transport.Msmq.MsmqTransport.OnFinishedMessageProcessing()
우리는 결국 기존의 데이터베이스 경합 문제의 결과로 발생했음을 발견했습니다. 처리기 코드에서 문제가 발생했을 때 DTC 트랜잭션이 너무 일찍 끝난 것으로 보이는 예외가 발생했습니다. 이로 인해 MSMQ가 사용할 수없는 트랜잭션을 참여시킬 수 없을 때 위의 오류가 발생했습니다. 내가 왜 우리 코드가 왜이 점을 더 분명하게 보이지 않는지에 대한 (곤혹스러운) 세부 사항을 남겨 둘 것입니다. 당신의 도움을 주셔서 감사합니다! –