1

システムに 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のサービスは何ですか?

4

0 に答える 0