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 Server 实例之间的对话示例,以在 SQL Server 和 activemq 之间进行对话。我需要指定服务器到服务器的通信,为此我需要将服务(发起者)指定给服务(目标)。我知道启动器服务器是sql server,但我不知道activemq的服务。我应该在数据库端的句柄对话中指定的 activemq 服务是什么?

4

0 回答 0