sql >> Databáze >  >> RDS >> Sqlserver

Sql Server Service Broker

Konverzační skupiny jsou místní pouze koncept, používaný výhradně pro zamykání:korelované konverzace patří do skupiny, takže zatímco zpracováváte zprávu v jedné konverzaci, jiné vlákno nemůže zpracovat korelovanou zprávu. Neexistují žádné informace o konverzačních skupinách, které si tyto dva koncové body vyměňují, takže ve vašem příkladu všechny koncové body iniciátoru nakonec patří do jedné konverzační skupiny, ale cílové koncové body jsou každý samostatnou konverzační skupinou (každá skupina má pouze jednu konverzaci). Důvod, proč se systém chová takto, je ten, že konverzační skupiny jsou navrženy tak, aby řešily problém, jako je například služba rezervace výletů:když obdrží zprávu, aby si „zarezervoval výlet“, musí si rezervovat let, hotel a auto. pronájem. Musí odeslat tři zprávy, jednu každé z těchto služeb ('lety', 'hotely', 'auta') a poté se odpovědi vrátí asynchronně. Když se vrátí, zpracování musí zajistit, aby nebyly zpracovány souběžně samostatnými vlákny, z nichž by se každé pokusilo aktualizovat stav záznamu 'trip'. V zasílání zpráv je tento problém známý jako 'problém korelace zpráv'.

Konverzační skupiny jsou však často nasazeny v SSB pouze z důvodů výkonu:umožňují větší výsledky RECEIVE. Cílové koncové body lze přesunout společně do skupiny pomocí MOVE CONVERSATION ale v praxi existuje mnohem jednodušší trik:obrátit směr rozhovoru. Mějte svůj cíl zahájit konverzace (seskupené) a zdroj odešle své 'aktualizace' na konverzaci(ech) zahájených cílem.

Několik poznámek:

  • Nepoužívejte vzor BEGIN/SEND/END. Znemožňujete v budoucnu diagnostikovat jakýkoli problém, viz Fire and Forget:Dobré pro armádu, ale ne pro konverzace Service Broker .
  • Nikdy nepoužívejte WITH CLEANUP v produkčním kódu. Je určen pro administrativní akce poslední instance, jako je obnova po havárii. Pokud to zneužijete, odepřete SSB jakoukoli šanci správně sledovat zprávu pro správné opakování doručení (pokud se zpráva z jakéhokoli důvodu odrazí od cíle, bude navždy ztracena).
  • SSB nezaručuje pořadí mezi konverzacemi, pouze v rámci jedné konverzace. Zahájení nové konverzace pro každou událost INSERT nezaručuje zachování cílového pořadí operací vkládání.



  1. Jak skrýt chybovou zprávu

  2. Dochází při používání cizích klíčů na serveru SQL k závažnému narušení výkonu?

  3. Která verze MySQL je kompatibilní s Airflow verze 1.10?

  4. Jak vytvořit Snapshot Replication