我的系统中安装了 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 服务是什么?