Mensagem do SQL Server para aplicativo externo (activemq)
Eu tenho um banco de dados do SQL Server e o Activemq instalado no meu sistema. Eu tentei criar o endpoint para ouvir a porta onde o activemq está. O porto é 61617
CREATE ENDPOINT InstInitiatorEndpoint
STATE = STARTED
AS TCP ( LISTENER_PORT = 61617 )
FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS );
GO
Mas isso resulta em um erro:
O nó de extremidade do Service Broker não pode escutar conexões devido ao seguinte erro: '10013 (foi feita uma tentativa de acessar um soquete de uma maneira proibida por suas permissões de acesso.)'.
Desde activemq já está sendo executado na mesma porta. Devo dar porta diferente? Se eu der um número de porta diferente, ele está sendo executado com sucesso. Mas basicamenteLISTENER_PORT=61617
significa que o ponto final escuta a porta 61617, não é? Alguém pode esclarecer minha dúvida?
EDITAR: Vamos supor que eu criei endpoint, tipo de mensagem, contrato, fila e serviço da seguinte forma
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
Agora eu crio a alça para a conversa como
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
Aqui, se você ver, tentei o exemplo de conversa entre duas instâncias do SQL Server para fazer uma conversa entre o SQL server e o activemq. Eu preciso especificar servidor para comunicação do servidor, para isso eu preciso especificar o serviço (Initiator) para serviço (destino). Conheço o servidor iniciador que é sql server, mas não sei o serviço do activemq. Qual seria o serviço do activemq que eu deveria especificar em lidar com conversação no lado do banco de dados?