システムに SQL Server データベースと Activemq がインストールされています。activemq があるポートをリッスンするエンドポイントを作成しようとしました。ポートは 61617 です
CREATE ENDPOINT InstInitiatorEndpoint
STATE = STARTED
AS TCP ( LISTENER_PORT = 61617 )
FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS );
GO
しかし、それはエラーになります:
Service Broker エンドポイントは、次のエラーが原因で接続をリッスンできません: '10013(アクセス許可で禁止されている方法でソケットにアクセスしようとしました。)'。
activemq はすでに同じポートで実行されているためです。別のポートを指定する必要がありますか? 別のポート番号を指定すると、正常に実行されます。しかし、基本的にLISTENER_PORT=61617
は、エンドポイントがポート 61617 をリッスンすることを意味しますね。誰も私の疑問を明確にすることができますか?
編集: 次のように、エンドポイント、メッセージ タイプ、コントラクト、キュー、およびサービスを作成したとします。
CREATE MESSAGE TYPE RequestMessage
VALIDATION = WELL_FORMED_XML;
CREATE MESSAGE TYPE ReplyMessage
VALIDATION = WELL_FORMED_XML;
GO
CREATE CONTRACT SimpleContract
(RequestMessage
SENT BY INITIATOR,
ReplyMessage
SENT BY TARGET
);
GO
CREATE QUEUE InstInitiatorQueue;
CREATE SERVICE InitiatorService
AUTHORIZATION InitiatorUser
ON QUEUE InstInitiatorQueue;
GO
DECLARE @Cmd NVARCHAR(4000);
SET @Cmd = N'USE InstInitiatorDB;
CREATE ROUTE InstTargetRoute
WITH SERVICE_NAME =
N''TargetService'',
ADDRESS = N''TCP://localhost:61617'';';
EXEC (@Cmd);
DECLARE @Cmd NVARCHAR(4000);
SET @Cmd = N'USE msdb
CREATE ROUTE InstInitiatorRoute
WITH SERVICE_NAME =
N''InitiatorService'',
ADDRESS = N''LOCAL''';
EXEC (@Cmd);
GO
CREATE REMOTE SERVICE BINDING TargetBinding
TO SERVICE
N'TargetService'
WITH USER = TargetUser;
GO
次に、会話のハンドルを次のように作成します
DECLARE @InitDlgHandle UNIQUEIDENTIFIER;
DECLARE @RequestMsg NVARCHAR(100);
BEGIN TRANSACTION;
BEGIN DIALOG @InitDlgHandle
FROM SERVICE InitiatorService
TO SERVICE N'TargetService'
ON CONTRACT SimpleContract
WITH
ENCRYPTION = ON;
SELECT @RequestMsg = N'<RequestMsg>Message for Target service434.</RequestMsg>';
SEND ON CONVERSATION @InitDlgHandle
MESSAGE TYPE RequestMessage
(@RequestMsg);
SELECT @RequestMsg AS SentRequestMsg;
COMMIT TRANSACTION;
GO
ここでは、SQLサーバーとactivemqの間で会話を行うために、2つのSQLサーバーインスタンス間の会話の例を試しました。サーバーからサーバーへの通信を指定する必要があります。そのためには、サービス (イニシエーター) をサービス (ターゲット) に指定する必要があります。SQL サーバーであるイニシエーター サーバーは知っていますが、activemq のサービスはわかりません。データベース側のハンドル会話で指定する必要があるactivemqのサービスは何ですか?