SQL Broker Piotr Grodzicki
Princip Jedná se o asynchronní službu pro obousměrnou komunikaci Je integrovanou součástí SQL serveru Komunikace probíhá mezi endpointy Obsah komunikace lze šifrovat Komunikuje se pomocí zpráv Zprávy dojdou pouze jednou a ve správném pořadí
Komponenty pro Service Broker Služba Konverzace Queue Service Contract Message Type Contract Service Program Begin Dialog Send Message End Conversation Service Program Receive Message Target Queue
Message Type Validace : NONE EMPTY WELL_FORMED_XML, VALID_XML WITH SCHEMA COLLECTION CREATE MESSAGE TYPE HelloWorldMessage VALIDATION = WELL_FORMED_XML ;
Contract CREATE CONTRACT HelloWorldContract (HelloWorldMessage SENT BY INITIATOR, HelloWorldResponse SENT BY TARGET);
Queue (fronta) CREATE QUEUE dbo.TargetQueue WITH STATUS = ON, ACTIVATION ( PROCEDURE_NAME = dbo.usp_HelloWorld MAX_QUEUE_READERS = 5, EXECUTE AS SELF ) ON PRIMARY;
Service (služba) CREATE SERVICE TargetService ON QUEUE dbo.TargetQueue (HelloWorldContract, HelloUniverseContract);
Konverzace jediná SQL Server Instance Service Program Begin Dialog Send Message End Conversation Service Program Receive Message Target Queue Různé SQL Server Instance Service Program Receive Message Target Queue Transmission Queue Service Program Begin Dialog Send Message End Conversation
Dialog BEGIN DIALOG FROM SERVICE InitiatorService TO SERVICE 'TargetService' ON CONTRACT HelloWorldContract;
Message (zpráva) SEND ON MESSAGE TYPE HelloWorldMessage (N' Hello, World! ');
Odesilatel UNIQUEIDENTIFIER ; BEGIN DIALOG FROM SERVICE InitiatorService TO SERVICE 'TargetService' ON CONTRACT HelloWorldContract; SEND ON MESSAGE TYPE HelloWorldMessage (N' Hello, World! ');
Příjemce BEGIN TRANSACTION ; WAITFOR ( GET CONVERSATION FROM dbo.TargetQueue); WHILE 1 = 1 BEGIN RECEIVE = = = CAST(message_body AS XML) FROM dbo.TargetQueue WHERE conversation_group_id ; = N'HelloWorldMessage‘ BEGIN SEND ON MESSAGE TYPE HelloWorldResponse (N' Right Back At You! ') END END END; COMMIT TRANSACTION ;
Příjem zpráv Příjem zprávy lze automatizovat pomocí uložené procedury – připojí se ke frontě Tato procedura může zajistit odeslání odpovědi Neúspěšné čtení zprávy –5 pokusů –Poté se zastaví fronta –Lze použít notifikaci
Děkuji za pozornost Piotr Grodzicki programátor databázový specialista