Microsoft SQL Server
सेवा दलाल
खोज…
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 )