同じインスタンスに 2 つのデータベースがあります。
1 つは ICMS と呼ばれ、もう 1 つは CarePay_DEV1 と呼ばれます
ICMS (ソース) で変更が発生すると、CarePay_Dev1 (宛先) にメッセージを送信する必要があります。
Broker Services は初めてで、メッセージをキューに入れようとしています。それが機能したら、うまくいけば、宛先のテーブルにデータを取得し、.Net コードによって処理されます。しかし、最初に目的地に何かを表示したいだけです。
ステップ 1: 2 つのデータベースでサービスを有効にします。
-- Enable Broker on CarePay
ALTER DATABASE CarePay_Dev1
SET ENABLE_BROKER;
-- Enable Broker on Source
ALTER DATABASE ICMS_TRN
SET ENABLE_BROKER;
ステップ 2: ソースと宛先でメッセージ タイプを作成します。
-- Create Message Type on Receiver:
USE CarePay_DEV1
GO
CREATE MESSAGE TYPE [IcmsCarePayMessage]
VALIDATION=WELL_FORMED_XML;
-- Create Message Type on Sender:
USE ICMS_TRN
GO
CREATE MESSAGE TYPE [IcmsCarePayMessage]
VALIDATION=WELL_FORMED_XML;
次に、両方のデータベースで連絡先を作成します。
-- Create Message Type on Receiver:
USE CarePay_DEV1
GO
CREATE MESSAGE TYPE [IcmsCarePayMessage]
VALIDATION=WELL_FORMED_XML;
-- Create Message Type on Sender:
USE ICMS_TRN
GO
CREATE MESSAGE TYPE [IcmsCarePayMessage]
VALIDATION=WELL_FORMED_XML;
次に、両方のデータベースにメッセージ キューを作成します。
-- CREATE Sending Messagw Queue
USE ICMS_TRN
GO
CREATE QUEUE CarePayQueue
-- CREATE Receiving Messagw Queue
USE CarePay_Dev1
GO
CREATE QUEUE CarePayQueue
最後に、両方のデータベースにサービスを作成します。
-- Create the message services
USE ICMS_TRN
GO
CREATE SERVICE [CarePayService]
ON QUEUE CarePayQueue
USE CarePay_DEV1
GO
CREATE SERVICE [CarePayService]
ON QUEUE CarePayQueue
これで、キューの準備ができたので、送信元から送信先に何かを送信してみます。
-- SEND THE MESSAGE!
USE ICMS_TRN
GO
DECLARE @InitDlgHandle UNIQUEIDENTIFIER
DECLARE @RequestMessage VARCHAR(1000)
BEGIN TRAN
BEGIN DIALOG @InitDlgHandle
FROM SERVICE [CarePayService]
TO SERVICE 'CarePayService'
ON CONTRACT [IcmsCarePayContract]
SELECT @RequestMessage = N'<Message>The eagle has landed!</Message>';
SEND ON CONVERSATION @InitDlgHandle
MESSAGE TYPE [IcmsCarePayMessage] (@RequestMessage)
COMMIT TRAN
私は得る:
コマンドは正常に完了しました。
しかし、宛先キューから選択しようとすると、空になります。
/****** Script for SelectTopNRows command from SSMS ******/
SELECT TOP 1000 *, casted_message_body =
CASE message_type_name WHEN 'X'
THEN CAST(message_body AS NVARCHAR(MAX))
ELSE message_body
END
FROM [CarePay_DEV1].[dbo].[CarePayQueue] WITH(NOLOCK)
誰でも問題を見つけることができますか? どのデータベースにメッセージを送信するかを送信先に伝える場所がわかりません - 問題の一部である可能性がありますか?