STOMP ActiveMQ Client
TsgcWSPClient_STOMP_ActiveMQ는 Apache ActiveMQ에 맞춘 STOMP 클라이언트입니다. ActiveMQ의 목적지 명명 규칙을 감싼 큐 헬퍼와 토픽 헬퍼, 모든 이벤트에서 제공되는 타입 있는 헤더 객체, 그리고 지속 구독에 필요한 브로커 전용 설정을 담은 ActiveMQ_Options 속성을 더했습니다.
TsgcWSPClient_STOMP_ActiveMQ는 Apache ActiveMQ에 맞춘 STOMP 클라이언트입니다. ActiveMQ의 목적지 명명 규칙을 감싼 큐 헬퍼와 토픽 헬퍼, 모든 이벤트에서 제공되는 타입 있는 헤더 객체, 그리고 지속 구독에 필요한 브로커 전용 설정을 담은 ActiveMQ_Options 속성을 더했습니다.
범용 STOMP 클라이언트의 모든 기능이 그대로 적용됩니다. 추가된 것은 목적지 헬퍼, ActiveMQ 이름이 붙은 이벤트, 그리고 브로커 옵션입니다.
TsgcWSPClient_STOMP_ActiveMQ
STOMP 1.0, 1.1, 1.2
TCP (61613) 또는 TLS (61612)
Delphi, C++ Builder
전송: 일반 TCP와 TLS. sgcMQ는 일반 TCP와 TLS로 ActiveMQ와 통신합니다. ActiveMQ의 STOMP over WebSocket 커넥터는 WebSocket 엔드포인트이므로, 여기에 접속하려면 WebSocket 클라이언트를 제공하는 sgcWebSockets 패키지가 필요합니다.
이 예제는 ActiveMQ의 기본 STOMP 포트인 61613을 사용합니다. 암호화된 연결이 필요하면 캐리어에서 TLS를 켜고 브로커의 stomp+ssl 커넥터를 포트 61612로 사용하세요.
uses
sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
sgcWebSocket_Protocol_STOMP_Broker_Client,
sgcWebSocket_Protocol_STOMP_ActiveMQ_Client;
var
TCPClient: TsgcTCPClient;
STOMP: TsgcWSPClient_STOMP_ActiveMQ;
begin
TCPClient := TsgcTCPClient.Create(nil);
TCPClient.Host := 'broker.example.com';
TCPClient.Port := 61613;
STOMP := TsgcWSPClient_STOMP_ActiveMQ.Create(nil);
STOMP.Client := TCPClient;
STOMP.ActiveMQ_Options.ClientId := 'delphi-consumer-1';
STOMP.Authentication.Enabled := True;
STOMP.Authentication.UserName := 'admin';
STOMP.Authentication.Password := 'admin';
STOMP.OnActiveMQConnected := ActiveMQConnected;
STOMP.OnActiveMQMessage := ActiveMQMessage;
TCPClient.Active := True;
end;
procedure TForm1.ActiveMQConnected(Connection: TsgcWSConnection;
Headers: TsgcWSActiveMQSTOMPHeadersConnected);
begin
STOMP.SubscribeQueue('orders');
STOMP.PublishQueue('orders', '{"id":42}');
end;
procedure TForm1.ActiveMQMessage(Connection: TsgcWSConnection;
MessageText: string; Headers: TsgcWSActiveMQSTOMPHeadersMessage;
Subscription: TsgcWSBrokerSTOMPSubscriptionItem);
begin
Memo1.Lines.Add(Headers.Destination + ': ' + MessageText);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_STOMP_ActiveMQ_Client.hpp
TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "broker.example.com";
TCPClient->Port = 61613;
TsgcWSPClient_STOMP_ActiveMQ *STOMP =
new TsgcWSPClient_STOMP_ActiveMQ(this);
STOMP->Client = TCPClient;
STOMP->ActiveMQ_Options->ClientId = "cbuilder-consumer-1";
STOMP->Authentication->Enabled = true;
STOMP->Authentication->UserName = "admin";
STOMP->Authentication->Password = "admin";
STOMP->OnActiveMQConnected = ActiveMQConnected;
STOMP->OnActiveMQMessage = ActiveMQMessage;
TCPClient->Active = true;
// In the OnActiveMQConnected handler:
STOMP->SubscribeQueue("orders");
STOMP->PublishQueue("orders", "{\"id\":42}");
가장 자주 사용하게 되는 멤버들입니다.
SubscribeQueue, PublishQueue, UnSubscribeQueue는 큐 이름만 받아 /queue/ 목적지를 만들어 주며, durable과 exclusive, ack 모드 인자를 함께 받습니다.
SubscribeTopic, PublishTopic, UnSubscribeTopic이 /topic/ 목적지에 대해 같은 일을 합니다. 지속 구독이 가장 중요한 곳이기도 합니다.
SubscribeEx, PublishEx, UnSubscribeEx는 원시 목적지 문자열을 받으므로 이름 있는 헬퍼가 다루지 않는 경우에 사용합니다.
ActiveMQ_Options는 ActiveMQ 전용 설정을 담으며, 브로커가 다시 돌아온 지속 구독자를 알아보는 데 쓰는 ClientId도 여기에 있습니다.
구독 헬퍼는 Durable 플래그를 받습니다. 덕분에 토픽 구독자가 연결을 끊었다가 나중에 브로커가 보관해 둔 메시지를 받아 갈 수 있습니다.
OnActiveMQMessage는 TsgcWSActiveMQSTOMPHeadersMessage와 해당 구독 항목을 함께 전달하므로 목적지, 메시지 id, ack 모드를 속성으로 다룰 수 있습니다.
구독할 때 ack 모드를 지정한 다음 메시지 id로 ACK 또는 NACK을 호출합니다. ackAuto에서는 메시지를 보내는 즉시 브로커가 전달된 것으로 간주합니다.
모든 발행 헬퍼는 콘텐츠 형식, 선택적 트랜잭션 이름, 그리고 우선순위와 지속성, 만료 같은 ActiveMQ 헤더를 담는 메시지 옵션 객체를 받습니다.
Client, Authentication, HeartBeat, Versions, Options는 범용 STOMP 클라이언트에서와 똑같이 동작합니다.