sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server Service Broker

Konversationsgrupper är lokala Endast koncept, används uteslutande för låsning:korrelerade konversationer hör hemma i en grupp så att medan du bearbetar ett meddelande i en konversation, kan en annan tråd inte bearbeta ett korrelerat meddelande. Det finns ingen information om konversationsgrupper som utbyts av de två slutpunkterna, så i ditt exempel hamnar alla initierande slutpunkter till en konversationsgrupp, men målslutpunkterna är var och en en distinkt konversationsgrupp (varje grupp har bara en konversation). Anledningen till att systemet beter sig så här är att konversationsgrupper är utformade för att lösa ett problem som till exempel en resebokningstjänst:när det får ett meddelande om att "boka en resa" måste det boka ett flyg, ett hotell och en bil uthyrning. Den måste skicka tre meddelanden, ett till var och en av dessa tjänster ('flyg', 'hotell', 'bilar') och sedan kommer svaren tillbaka, asynkront. När de kommer tillbaka måste bearbetningen säkerställa att de inte behandlas samtidigt av separata trådar, som var och en skulle försöka uppdatera "resan"-poststatusen. I meddelandehantering är detta problem känt som 'meddelandekorrelationsproblem'.

Men ofta används konversationsgrupper i SSB enbart av prestationsskäl:de tillåter större RECEIVE-resultat. Målslutpunkter kan flyttas tillsammans till en grupp genom att använda FLYTT KONVERSATION men i praktiken finns det ett mycket enklare knep:vänd riktningen på konversationen. Ha din destination starta konversationerna (grupperade) och källan skickar sina "uppdateringar" på konversationen/konversationerna som startas av destinationen.

Några anteckningar:

  • Använd inte eld-och-glöm-mönstret BÖRJA/SKICKA/SLUTA. Du gör det omöjligt att diagnostisera något problem i framtiden, se Fire and Forget:Bra för militären, men inte för Service Broker-samtal .
  • Använd aldrig MED CLEANUP i produktionskod. Den är avsedd för administrativa sista utvägsåtgärder som katastrofåterställning. Om du missbrukar det nekar du SSB någon chans att spåra meddelandet för korrekt leverans igen (om meddelandet studsar mot målet, av någon anledning, kommer det att gå förlorat för alltid).
  • SSB garanterar inte ordning mellan konversationer, bara inom en konversation. Att starta en ny konversation för varje INSERT-händelse garanterar inte att ordningen för infogningsoperationer bevaras på målet.



  1. MySql select IN-sats sträng kommaavgränsad

  2. Inkluderar MySQL som ingår i MAMP inte en konfigurationsfil?

  3. Spara specialtecken i MySQL-databasen

  4. SQL Server UNION - Vilket är standardbeteendet ORDER BY Behavior