Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server-Servicebroker

Gesprächsgruppen sind lokal Nur Konzept, das ausschließlich zum Sperren verwendet wird:Korrelierte Konversationen gehören in eine Gruppe, sodass ein anderer Thread eine korrelierte Nachricht nicht verarbeiten kann, während Sie eine Nachricht in einer Konversation verarbeiten. Es gibt keine Informationen über Konversationsgruppen, die von den beiden Endpunkten ausgetauscht werden, sodass in Ihrem Beispiel alle Initiatorendpunkte zu einer Konversationsgruppe gehören, aber die Zielendpunkte jeweils eine unterschiedliche Konversationsgruppe sind (jede Gruppe hat nur eine Konversation). Der Grund dafür, dass sich das System so verhält, liegt darin, dass Konversationsgruppen darauf ausgelegt sind, ein Problem wie beispielsweise einen Reisebuchungsdienst anzugehen:Wenn es eine Nachricht zum „Buchen einer Reise“ erhält, muss es einen Flug, ein Hotel und ein Auto reservieren Vermietung. Es muss drei Nachrichten senden, eine an jeden dieser Dienste ('Flüge', 'Hotels', 'Autos') und dann kommen die Antworten asynchron zurück. Wenn sie zurückkommen, muss die Verarbeitung sicherstellen, dass sie nicht gleichzeitig von separaten Threads verarbeitet werden, die jeweils versuchen würden, den „Trip“-Aufzeichnungsstatus zu aktualisieren. Beim Messaging ist dieses Problem als „Message Correlation Problem“ bekannt.

Allerdings werden Konversationsgruppen in SSB oft nur aus Performance-Gründen eingesetzt:Sie ermöglichen größere RECEIVE-Ergebnisse. Zielendpunkte können mithilfe von MOVE CONVERSATION aber in der Praxis gibt es einen viel einfacheren Trick:die Gesprächsrichtung umkehren. Haben Sie Ihr Ziel Starten Sie die Konversationen (gruppiert) und die Quelle sendet seine 'Aktualisierungen' über die Konversation(en), die vom Ziel gestartet wurden.

Einige Anmerkungen:

  • Verwenden Sie nicht das Feuer-und-Vergessen-Muster von BEGIN/SEND/END. Sie machen es unmöglich, in Zukunft Probleme zu diagnostizieren, siehe Fire and Forget:Gut für das Militär, aber nicht für Service Broker-Gespräche .
  • Verwenden Sie niemals WITH CLEANUP im Produktionscode. Es ist für administrative Maßnahmen als letztes Mittel wie die Notfallwiederherstellung vorgesehen. Wenn Sie es missbrauchen, verweigern Sie SSB jede Chance, die Nachricht für eine korrekte erneute Zustellung zu verfolgen (wenn die Nachricht aus irgendeinem Grund auf dem Ziel zurückprallt, geht sie für immer verloren).
  • SSB garantiert keine Konversationsordnung, sondern nur innerhalb einer Konversation. Das Starten einer neuen Konversation für jedes INSERT-Ereignis garantiert nicht, dass die Reihenfolge der Einfügeoperationen zielgerichtet beibehalten wird.