2016-04-29 9 views
0

So bekam ich meine Host-Handling-Nachrichten. Was es macht? Abrufen der Nachricht, die die E-Mail-Adresse, den Betreff und den Betreff enthält. und senden Sie die E-Mail mit SMTP.nservicebus host wird keine Nachrichten aus der Warteschlange entfernen

so in der Produktion, in einem unserer Clients, sehe ich 370 Nachrichten in der Warteschlange. Keine Nachrichten verlassen die Warteschlange. nur neue Nachrichten kommen rein.

Ich schaute auf das Protokoll. Was ist das ist das:

2016-04-28 17:35:10,243 [DAPROD01] [3] [] INFO : Failed to process message 
System.Net.Mail.SmtpException: The operation has timed out. 
    at System.Net.Mail.SmtpClient.Send(MailMessage message) 
    at EmailServiceHost.Utilities.EmailSender.Send(String recipient, String subject, String body) in e:\r-release\src\EmailServiceHost\Utilities\EmailSender.cs:line 24 
    at NServiceBus.Unicast.HandlerInvocationCache.Invoke(Object handler, Object message, Dictionary`2 dictionary) in :line 0 
    at NServiceBus.Pipeline.Behaviors.InvokeHandlersBehavior.DispatchMessageToHandlersBasedOnType(IBuilder builder, LogicalMessage toHandle, LoadedMessageHandlers loadedHandlers, BehaviorContext context) in :line 0 
    at NServiceBus.Pipeline.Behaviors.InvokeHandlersBehavior.Invoke(BehaviorContext context, Action next) in :line 0 
    at NServiceBus.Sagas.SagaPersistenceBehavior.Invoke(BehaviorContext context, Action next) in :line 0 
    at NServiceBus.Pipeline.Behaviors.LoadHandlersBehavior.Invoke(BehaviorContext context, Action next) in :line 0 
    at NServiceBus.Pipeline.Behaviors.CallbackInvocationBehavior.Invoke(BehaviorContext context, Action next) in :line 0 
    at NServiceBus.Pipeline.Behaviors.ApplyIncomingMessageMutatorsBehavior.Invoke(BehaviorContext context, Action next) in :line 0 
    at NServiceBus.Pipeline.Behaviors.ExtractLogicalMessagesBehavior.Invoke(BehaviorContext context, Action next) in :line 0 
    at NServiceBus.Pipeline.Behaviors.ApplyIncomingTransportMessageMutatorsBehavior.Invoke(BehaviorContext context, Action next) in :line 0 
    at NServiceBus.UnitOfWork.UnitOfWorkBehavior.Invoke(BehaviorContext context, Action next) in :line 0 
2016-04-28 17:35:10,602 [DAPROD01] [48] [] ERROR: Message has failed FLR and will be moved to the configured error q, ID=ec40ebe5-90a5-4014-be42-a5f500877d2a. 
2016-04-28 17:36:50,689 [DAPROD01] [48] [] INFO : Failed to process message 
System.Transactions.TransactionAbortedException: The transaction has aborted. 
    at System.Transactions.TransactionStatePromotedAborted.BeginCommit(InternalTransaction tx, Boolean asyncCommit, AsyncCallback asyncCallback, Object asyncState) 
    at System.Transactions.CommittableTransaction.Commit() 
    at System.Transactions.TransactionScope.InternalDispose() 
    at System.Transactions.TransactionScope.Dispose() 
    at NServiceBus.Transports.Msmq.MsmqDequeueStrategy.Action() in :line 0 

so Sie feststellen, dass der erste Fehler das Timeout des SMTP-Client enthält. die nächsten 200 Fehler sagen nur Fehler beim Verarbeiten der Nachricht.

Die Nachrichten werden nicht aus der privaten Warteschlange entfernt.

+0

Werden die Nachrichten in die Fehlerwarteschlange verschoben oder bleiben sie in der Eingabewarteschlange? –

+0

Ich bin mit Tom. Wenn Nachrichten weiterhin fehlschlagen, sollten sie in die Fehlerwarteschlange bij NServiceBus verschoben werden. Es ist möglich, dass sie abgeholt und wieder in die Warteschlange verschoben oder in die Warteschlange für Wiederholungen oder die Fehlerwarteschlange verschoben werden. Was sind Ihre Einstellungen bei Wiederholungen auf der ersten Ebene, Wiederholungen auf der zweiten Ebene und Fehler- und Prüfwarteschlangen? –

+0

Sie kommen nicht in die Fehlerwarteschlange. Ich habe alle Standardeinstellungen (5 FLR und keine SLR). Die Nachrichten bleiben nur in der Warteschlange. – user3329192

Antwort

0

Ein Message-Handler verarbeitet Nachrichten in einer Transaktion. Wenn während der Verarbeitung einer Nachricht eine Ausnahme empfangen wird, wird die Transaktion zurückgesetzt, und die Nachricht wird wieder in die Warteschlange gestellt.

Es sieht so aus, als ob Ihr Nachrichtenhandler keine Mail senden kann. Entweder ist der SMTP-Server nicht verfügbar oder eine Firewall verbietet die Verbindung zu ihm. Die Zeitüberschreitungsausnahme, die Sie erhalten, führt dazu, dass die Transaktion zurückgesetzt wird.

Schließlich sollte NServiceBus eine Nachricht verschieben, die weiterhin in der Fehlerwarteschlange fehlschlägt. Ich weiß nicht, was das hier nicht passiert. Vielleicht warten Sie nicht lange genug? BTW, ich denke, die Standardeinstellungen sind 5 FLRs und 3 SLRs.