3

同じインスタンスに 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)

誰でも問題を見つけることができますか? どのデータベースにメッセージを送信するかを送信先に伝える場所がわかりません - 問題の一部である可能性がありますか?

4

2 に答える 2