STOMP Client 컴포넌트: sgcMQ | eSeGeCe

STOMP Client

TsgcWSPClient_STOMP는 범용 STOMP 1.0, 1.1, 1.2 클라이언트입니다. STOMP는 텍스트 프레임 프로토콜이라 추적하기 쉽고, 메시징 엔드포인트를 제공하는 거의 모든 브로커에서 동작합니다. 이 컴포넌트는 표준 프레임 집합을 다루며, RabbitMQ와 ActiveMQ용 브로커 전용 파생 컴포넌트도 함께 제공됩니다.

TsgcWSPClient_STOMP

Versions로 허용할 프로토콜 버전을 알리면 브로커가 CONNECT 교환 과정에서 하나를 선택합니다. 협상된 버전은 OnSTOMPConnected로 전달됩니다.

컴포넌트 클래스

TsgcWSPClient_STOMP

사양

STOMP 1.0, 1.1, 1.2

전송

TCP (61613) 또는 TLS

언어

Delphi, C++ Builder

전송: 일반 TCP와 TLS. sgcMQ는 일반 TCP와 TLS로 연결합니다. STOMP over WebSocket이 필요하다면 WebSocket 클라이언트를 제공하는 sgcWebSockets 패키지가 필요합니다.

id로 구독한 다음 전송하기

STOMP는 사용자가 직접 정한 id로 구독을 식별합니다. 같은 id를 UnSubscribe에 전달하며, 수신되는 모든 MESSAGE 프레임에도 그 id가 담겨 돌아옵니다.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Client;

var
  TCPClient: TsgcTCPClient;
  STOMP: TsgcWSPClient_STOMP;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 61613;

  STOMP := TsgcWSPClient_STOMP.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.Versions.V1_2 := True;
  STOMP.Options.VirtualHost := '/';
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'guest';
  STOMP.Authentication.Password := 'guest';
  STOMP.HeartBeat.Enabled := True;

  STOMP.OnSTOMPConnected := STOMPConnected;
  STOMP.OnSTOMPMessage   := STOMPMessage;

  TCPClient.Active := True;
end;

procedure TForm1.STOMPConnected(Connection: TsgcWSConnection;
  Version, Server, Session, HeartBeat, RawHeaders: string);
begin
  STOMP.Subscribe('sub-0', '/queue/orders');
  STOMP.Send('/queue/orders', '{"orderId":12345}');
end;

procedure TForm1.STOMPMessage(Connection: TsgcWSConnection;
  MessageText, Destination, MessageId, Subscription, ACK, ContentType,
  RawHeaders: string);
begin
  Memo1.Lines.Add(Destination + ': ' + MessageText);
  STOMP.ACK(MessageId);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_STOMP_Client.hpp

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "broker.example.com";
TCPClient->Port = 61613;

TsgcWSPClient_STOMP *STOMP = new TsgcWSPClient_STOMP(this);
STOMP->Client = TCPClient;
STOMP->Versions->V1_2 = true;
STOMP->Authentication->Enabled  = true;
STOMP->Authentication->UserName = "guest";
STOMP->Authentication->Password = "guest";

STOMP->OnSTOMPConnected = STOMPConnected;
STOMP->OnSTOMPMessage   = STOMPMessage;

TCPClient->Active = true;

// In the OnSTOMPConnected handler:
STOMP->Subscribe("sub-0", "/queue/orders");
STOMP->Send("/queue/orders", "{\"orderId\":12345}");

주요 속성 & 메서드

가장 자주 사용하게 되는 멤버들입니다.

보내기

Send(destination, text, contentType, transaction, customHeaders)가 SEND 프레임을 씁니다. 뒤쪽 세 인자는 선택 사항이므로 간단한 전송은 매개변수 두 개면 됩니다.

구독하기

Subscribe(id, destination, ack, customHeaders)는 직접 정한 id로 구독을 등록하고, UnSubscribe(id)가 이를 해제합니다. ack 모드의 기본값은 ackAuto입니다.

확인 응답

ACK(id, transaction)은 메시지를 확인하고 NACK(id, transaction)은 거부합니다. 둘 다 MESSAGE 프레임과 함께 도착한 메시지 id를 받습니다.

트랜잭션

BeginTransaction, CommitTransaction, AbortTransaction은 트랜잭션 이름을 받습니다. 그 이름을 SendACK에 전달하면 해당 트랜잭션에 묶입니다.

메시지 이벤트

OnSTOMPMessage는 본문, 목적지, 메시지 id, 구독 id, ack 모드, 콘텐츠 형식, 원시 헤더 블록을 전달하므로 프레임의 어떤 정보도 잃지 않습니다.

버전 협상

Versions.V1_0, V1_1, V1_2가 클라이언트가 알릴 버전을 정합니다. 브로커가 선택한 버전은 OnSTOMPConnected의 첫 번째 인자입니다.

수신 확인과 오류

브로커가 프레임을 확인하면 OnSTOMPReceipt가, 거부하면 OnSTOMPError가 발생하며, 둘 다 수신 확인 id와 원시 헤더를 함께 전달합니다.

하트비트

HeartBeat는 CONNECT에서 협상되는 송신 및 수신 간격을 설정합니다. Ping으로 직접 하나를 보낼 수 있고 OnSTOMPPing이 그 교환을 알려 줍니다.

연결 옵션

Options.VirtualHost는 CONNECT의 host 헤더가 되고, Options.DisconnectTimeout은 정상 종료 Disconnect가 브로커의 수신 확인을 기다리는 시간을 제한합니다.

계속 살펴보기

온라인 도움말전체 API 레퍼런스와 사용 안내서.
RabbitMQ용 STOMPRabbitMQ 목적지 헬퍼를 갖춘 파생 컴포넌트.
ActiveMQ용 STOMPApache ActiveMQ에 맞춘 파생 컴포넌트.
무료 체험판 다운로드STOMP를 지원하는 모든 브로커에 연결해 보세요.
가격Single, Team, Site 라이선스, 전체 소스 코드 포함.
최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

시작할 준비가 되셨나요?

무료 체험판을 다운로드하고 Delphi 또는 C++ Builder에서 첫 STOMP 프레임을 보내 보세요.