2016-07-15 17 views
1

Nach dem Belastungstest fand ich einige Pakete nicht sequentiell.MSMQ: Gewährleistet MSMQ sequenzielle Nachrichtenübergabe?

es ist eine grundlegende WCF-Dienst und Client sendet kontinuierlich die Anfrage.

+0

Vielleicht [dies] (https://blogs.msdn.microsoft.com/napegadie_kones_msft_blog/2015/02/07/wcf-processes-messages-from-msmq-out-of-order-using-netmsmbbinding/) ist Wonach suchen Sie. Aber ich denke [http://stackoverflow.com/questions/13802385/how-to-enforce-message-queue-sequence-with-multiple-wcf-services-instances] wäre eine nachhaltigere Lösung. – khlr

+0

Bedeutet dies, dass die sequentielle Nachrichtenübermittlung nicht gewährleistet ist. – User

+1

Je nach Konfiguration könnte ein Element in die Wiederholungswarteschlange gestellt werden. Ihre Nachrichtenreihenfolge wird dann standardmäßig geändert. Entwerfen Sie Ihre Lösung nicht in Abhängigkeit von der Nachrichtenreihenfolge. –

Antwort

0

Es ist möglich, eine garantierte (in Reihenfolge, genau einmal) Zustellung mit netMsmqBinding zu haben.

Das erste, was Sie tun müssen, ist Ihre tatsächlichen MSMQ-Nachrichtenwarteschlange Transaktion zu erstellen.

Zweitens müssen Sie WCF sagen in der Transaktion zu gewinnen, wie so:

[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)] 
public void Handle(Something msg) 
{ 
    .... 
} 

Schließlich müssen Sie garantiert Verhalten des Dienstes angeben, indem Sie die ExactlyOnce Bindung Paramter mit:

<netMsmqBinding> 
    <binding name="netMsmqBinding_IMyServiceInterface" 
      exactlyOnce="true"> 
    ... 
    </binding> 
</netMsmqBinding> 

ExactlyOnce teilt WCF mit, dass wir Transaktionen benötigen, dass jede Nachricht genau einmal und in der Reihenfolge gesendet wird, in der sie gesendet wurden.

+0

Danke für die Antwort, ich tat genau das gleiche, aber es hat keine Sequenz garantiert. – User

+0

@User - konnten Sie Nachrichten in der falschen Reihenfolge ankommen lassen? Wie hast du das erreicht? Auch können Sie Ihre Service-Schnittstelle und Implementierung pls? –

+0

@Benutzen Sie auch einen einzelnen Dienst, der mehr als einen Dienst ausführt oder skaliert? –