खोज…


1. मूल बातें

सेवा ब्रोकर दो (या अधिक) संस्थाओं के बीच एसिंक्रोनस संचार पर आधारित तकनीक है। सेवा दलाल में शामिल हैं: संदेश प्रकार, अनुबंध, कतार, सेवाएँ, मार्ग और कम से कम उदाहरण के समापन बिंदु

अधिक: https://msdn.microsoft.com/en-us/library/bb522893.aspx

2. डेटाबेस पर सर्विस ब्रोकर को सक्षम करें

ALTER DATABASE [MyDatabase] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;

3. डेटाबेस पर बुनियादी सेवा दलाल निर्माण (एकल डेटाबेस संचार)

USE [MyDatabase]  

CREATE MESSAGE TYPE [//initiator] VALIDATION = WELL_FORMED_XML;
    GO

CREATE CONTRACT [//call/contract]
(
    [//initiator] SENT BY INITIATOR 
)
GO

CREATE QUEUE  InitiatorQueue;
GO

CREATE QUEUE  TargetQueue;
GO

CREATE SERVICE InitiatorService
      ON QUEUE InitiatorQueue
(
     [//call/contract]    
      
)

CREATE SERVICE TargetService
ON QUEUE TargetQueue 
(
     [//call/contract]    
      
)

GRANT SEND ON SERVICE::[InitiatorService] TO PUBLIC
GO

GRANT SEND ON SERVICE::[TargetService] TO PUBLIC
GO

हमें एक डेटाबेस संचार के लिए मार्ग की आवश्यकता नहीं है।

4. सेवा दलाल के माध्यम से बुनियादी संचार कैसे भेजें

इस प्रदर्शन के लिए हम इस प्रलेखन के दूसरे भाग में निर्मित सेवा दलाल निर्माण का उपयोग करेंगे। उल्लेखित भाग का नाम दिया गया है 3. डेटाबेस (एकल डेटाबेस संचार) पर बुनियादी सेवा दलाल निर्माण बनाएं

USE [MyDatabase]

DECLARE @ch uniqueidentifier = NEWID()
DECLARE @msg XML 

BEGIN DIALOG CONVERSATION @ch
    FROM SERVICE [InitiatorService]
    TO SERVICE 'TargetService'
    ON CONTRACT [//call/contract]
    WITH ENCRYPTION = OFF; -- more possible options

        SET @msg = (
                    SELECT 'HelloThere' "elementNum1"
                    FOR XML PATH(''), ROOT('ExampleRoot'), ELEMENTS XSINIL, TYPE
                    );         
      
SEND ON CONVERSATION @ch MESSAGE TYPE [//initiator] (@msg);
END CONVERSATION @ch;

इस बातचीत के बाद आपका टारगेट क्यू में मैसेज होगा

5. टारगेट क्यू से स्वचालित रूप से बातचीत कैसे प्राप्त करें

इस प्रदर्शन के लिए हम इस प्रलेखन के दूसरे भाग में निर्मित सेवा दलाल निर्माण का उपयोग करेंगे। उल्लेखित हिस्सा कहा जाता है 3. डेटाबेस (एकल डेटाबेस संचार) पर बुनियादी सेवा दलाल निर्माण बनाएं

पहले हमें एक ऐसी प्रक्रिया बनाने की जरूरत है जो कतार से डेटा को पढ़ने और संसाधित करने में सक्षम हो

USE [MyDatabase]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[p_RecieveMessageFromTargetQueue] 
    
    AS
    BEGIN
    
    declare 
    @message_body xml, 
    @message_type_name nvarchar(256), 
    @conversation_handle uniqueidentifier,
    @messagetypename nvarchar(256);

    
              
   WHILE 1=1
   BEGIN
    
    BEGIN TRANSACTION
        WAITFOR(
        RECEIVE TOP(1)
        @message_body = CAST(message_body as xml), 
        @message_type_name = message_type_name,
        @conversation_handle = conversation_handle,
        @messagetypename = message_type_name
        FROM DwhInsertSmsQueue
        ), TIMEOUT 1000;
    
         IF (@@ROWCOUNT = 0)
            BEGIN
                ROLLBACK TRANSACTION
                BREAK
            END

         IF (@messagetypename = '//initiator')
             BEGIN
                
                IF OBJECT_ID('MyDatabase..MyExampleTableHelloThere') IS NOT NULL 
                    DROP TABLE dbo.MyExampleTableHelloThere
                
                SELECT @message_body.value('(/ExampleRoot/"elementNum1")[1]', 'VARCHAR(50)') AS MyExampleMessage
                INTO dbo.MyExampleTableHelloThere
             
             END
    
           
 
         IF (@messagetypename = 'http://schemas.microsoft.com/SQL/ServiceBroker/EndDialog')
            BEGIN
                END CONVERSATION @conversation_handle;
            END
   
    COMMIT TRANSACTION
   END
   

END

दूसरा चरण: अपने लक्ष्य-निर्धारण को स्वचालित रूप से अपनी प्रक्रिया चलाने की अनुमति दें:

USE [MyDatabase]

ALTER QUEUE [dbo].[TargetQueue] WITH STATUS = ON , RETENTION = OFF , 
ACTIVATION
 (  STATUS = ON , --activation status
    PROCEDURE_NAME = dbo.p_RecieveMessageFromTargetQueue , --procedure name
    MAX_QUEUE_READERS = 1 , --number of readers
    EXECUTE AS SELF  )


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow