Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Sql Server Service Broker

Групите за разговори са местни само концепция, използвана изключително за заключване:корелираните разговори принадлежат към група, така че докато обработвате съобщение в един разговор, друга нишка не може да обработи свързано съобщение. Няма информация за групите за разговори, обменени от двете крайни точки, така че във вашия пример всички крайни точки на инициатора в крайна сметка принадлежат към една група за разговори, но целевите крайни точки са всяка отделна група за разговори (всяка група има само един разговор). Причината, поради която системата се държи по този начин, е, че групите за разговори са предназначени да се справят с проблем като, да речем, услуга за резервиране на пътуване:когато получи съобщение за „резервиране на пътуване“, тя трябва да резервира полет, хотел и кола отдаване под наем. Той трябва да изпрати три съобщения, по едно до всяка от тези услуги („полети“, „хотели“, „коли“) и след това отговорите ще се върнат, асинхронно. Когато се върнат, обработката трябва да гарантира, че те не се обработват едновременно от отделни нишки, всяка от които ще се опита да актуализира статуса на записа „пътуване“. В съобщенията този проблем е известен като „проблем на корелацията на съобщенията“.

Въпреки това, често разговорните групи се разполагат в SSB единствено поради съображения за производителност:те позволяват по-големи резултати ПОЛУЧАВАНЕ. Целевите крайни точки могат да бъдат преместени заедно в група с помощта на MOVE CONVERSATION но на практика има много по-прост трик:обръщане на посоката на разговора. Имайте своята дестинация започнете разговорите (групирани) и източника изпраща своите „актуализации“ за разговор(ите), започнат от местоназначението.

Някои бележки:

  • Не използвайте модела за стартиране и забравяне на BEGIN/SEND/END. Правите невъзможно диагностицирането на какъвто и да е проблем в бъдеще, вижте Изстреляйте и забравете:Добре е за военните, но не и за разговори с брокер на услуги .
  • Никога не използвайте WITH CLEANUP в производствения код. Предназначен е за административни действия като последна инстанция, като възстановяване след бедствие. Ако злоупотребите с него, вие отказвате на SSB всяка възможност да проследи правилно съобщението за правилна повторна доставка (ако съобщението отскочи на целта, по каквато и да е причина, то ще бъде загубено завинаги).
  • SSB не гарантира ред в разговорите, само в рамките на един разговор. Започването на нов разговор за всяко събитие INSERT не гарантира запазването на целевия ред на операциите за вмъкване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Правилен метод за изтриване на над 2100 реда (по ID) с Dapper

  2. Как програмно определяте кои SQL таблици имат колона за идентичност

  3. Създайте таблица (структура) от съществуваща таблица

  4. datetime2 срещу datetimeoffset в SQL Server:Каква е разликата?

  5. Алгоритъм за избягване на SQL инжектиране на MSSQL сървър от C# код?