我的系统中安装了 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,不是吗?谁能澄清我的疑问吗?
EDIT:假设我已经创建了端点、消息类型、合约、队列和服务,如下所示
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的服务?