Wiadomość z SQL Server do aplikacji zewnętrznej (activemq)
Mam bazę danych SQL Server i Activemq zainstalowany w moim systemie. Próbowałem utworzyć punkt końcowy, aby nasłuchiwać portu, na którym znajduje się activemq. Port to 61617
CREATE ENDPOINT InstInitiatorEndpoint
STATE = STARTED
AS TCP ( LISTENER_PORT = 61617 )
FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS );
GO
Ale powoduje to błąd:
Punkt końcowy usługi Service Broker nie może nasłuchiwać połączeń z powodu następującego błędu: „10013 (Podjęto próbę uzyskania dostępu do gniazda w sposób zabroniony przez jego uprawnienia dostępu.)”.
Ponieważ activemq jest już uruchomiony na tym samym porcie. Czy powinienem podać inny port? Jeśli podam inny numer portu, zostanie on pomyślnie uruchomiony. Ale w zasadzieLISTENER_PORT=61617
oznacza, że punkt końcowy nasłuchuje na porcie 61617, prawda? czy ktoś może wyjaśnić moje wątpliwości?
EDYTOWAĆ: Załóżmy, że utworzyłem punkt końcowy, typ wiadomości, umowę, kolejkę i usługę w następujący sposób
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
Teraz tworzę uchwyt do rozmowy jako
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
Tutaj Jeśli zobaczysz, próbowałem przykład konwersacji między dwoma wystąpieniami serwera SQL, aby przeprowadzić konwersację między serwerem SQL a activemq. Muszę określić komunikację między serwerem a serwerem, w związku z tym muszę określić usługę (inicjatora) usługi (docelowej). Znam serwer inicjatora, który jest serwerem sql, ale nie znam usługi activemq. Jaka byłaby usługa activemq, którą powinienem określić podczas obsługi konwersacji po stronie bazy danych?