Delphi AMQP 클라이언트 | AMQP 1.0 & 0.9.1 컴포넌트 | eSeGeCe

Delphi AMQP 클라이언트 — AMQP 1.0 및 0.9.1 컴포넌트

Delphi 및 C++Builder용 두 가지 네이티브 AMQP 클라이언트 컴포넌트: TsgcWSPClient_AMQP는 익스체인지, 큐, 바인딩 및 컨슈머 확인 응답과 함께 RabbitMQ에 AMQP 0.9.1로 통신하고, TsgcWSPClient_AMQP1은 Azure Service Bus, Apache Qpid 및 모든 호환 브로커에 OASIS AMQP 1.0으로 통신해요 — WebSocket 또는 raw-TCP 캐리어 위에서.

두 AMQP 버전, 하나의 라이브러리

AMQP 0.9.1과 AMQP 1.0은 이름은 같지만 서로 다른 와이어 프로토콜이에요. sgcWebSockets는 각각을 네이티브로 구현하므로 브로커에 맞는 컴포넌트를 선택하면 돼요.

Delphi AMQP 클라이언트는 VCL 또는 FMX 애플리케이션을 엔터프라이즈 메시지 브로커에 연결해요. AMQP 0.9.1은 RabbitMQ가 사용하는 널리 배포된 버전이에요: 익스체인지와 큐를 선언하고, 라우팅 키로 바인딩하고, basic.publish로 발행하고 basic.consume으로 소비하며, 그 위에 트랜잭션과 컨펌이 있어요. AMQP 1.0은 Azure Service Bus와 Apache Qpid가 사용하는 OASIS 표준이에요: 세션, 센더 링크 및 리시버 링크 위에 구축된 대칭 링크 프로토콜로, Azure Service Bus SAS 및 OAuth 인증을 위한 Claims-Based-Security 토큰 헬퍼를 갖추고 있어요.

두 컴포넌트 모두 Client 속성을 통해 TsgcWebSocketClient에 연결되고 WebSocket 또는 raw-TCP 캐리어 위에서 실행되므로, 동일한 코드가 표준 AMQP 포트의 브로커에 도달하거나 포트 443을 통해 HTTP 전용 인프라를 통과하는 터널링을 할 수 있어요.

AMQP 0.9.1

TsgcWSPClient_AMQP: 익스체인지, 큐, 바인딩, 트랜잭션

AMQP 1.0

TsgcWSPClient_AMQP1: 세션, 센더 및 리시버 링크, CBS 토큰

전송

WebSocket 또는 raw-TCP 캐리어, 둘 다 TLS 선택 가능

플랫폼

Windows, macOS, Linux, iOS, Android. Delphi 7부터 Delphi 13까지

완전한 AMQP 클라이언트 표면

모든 프로토콜 작업은 메서드로, 모든 브로커 알림은 이벤트로 제공돼요.

익스체인지 & 큐 (0.9.1)

DeclareExchange, DeclareQueueBindQueue가 코드에서 RabbitMQ 라우팅 토폴로지를 구축해요: OpenChannel을 통한 채널별 범위 지정과 함께 direct, fanout 및 topic 라우팅.

발행 & 소비 (0.9.1)

PublishMessage는 라우팅 키와 함께 익스체인지로 전송하고, Consume은 큐를 구독하며 전달은 OnAMQPBasicDeliver를 통해 도착해요.

세션 & 링크 (1.0)

CreateSession이 AMQP 1.0 세션을 열고, CreateSenderLinkCreateReceiverLink가 노드 주소에 연결돼요. 들어오는 전송은 OnAMQPMessage를 통해 도착해요.

Azure Service Bus (1.0)

Claims-Based-Security 헬퍼가 Azure Service Bus SAS / OAuth 토큰 흐름을 감싸므로, 네임스페이스에 대한 인증이 직접 구축하는 CBS 교환이 아닌 속성 설정으로 끝나요.

전달 피드백

OnAMQPMessageSentOnAMQPMessageSentAck가 전송이 클라이언트를 떠난 시점과 브로커가 확정한 시점을 보고해요.

SASL 인증

인증 챌린지는 OnAMQPSASLAuthentication (1.0) 및 OnAMQPAuthentication / OnAMQPChallenge (0.9.1)를 통해 표면화돼요.

HeartBeat

0.9.1 클라이언트는 HeartBeat 속성을 게시하여 유휴 연결이 프록시와 브로커 타임아웃을 넘어 살아 있도록 유지해요.

수명 주기 이벤트

OnAMQPConnect, OnAMQPDisconnect, OnAMQPCloseOnAMQPException이 프로토콜 상태를 애플리케이션에 계속 알려요.

에디션

두 AMQP 클라이언트 모두 Standard부터 Enterprise와 All-Access까지 sgcWebSockets의 모든 에디션과 .NET 라이브러리에 포함돼요.

몇 줄로 발행하고 소비하기

AMQP 컴포넌트를 TsgcWebSocketClient와 짝지어 연결한 다음, 선언 / 연결하고 시작하세요.

uses
  sgcWebSocket, sgcWebSocket_Protocol_AMQP_Client, sgcAMQP_Classes;

var
  WSClient: TsgcWebSocketClient;
  AMQP: TsgcWSPClient_AMQP;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'broker.example.com';
  WSClient.Port := 15674;
  WSClient.Options.Parameters := '/ws';

  AMQP := TsgcWSPClient_AMQP.Create(nil);
  AMQP.Client := WSClient;

  AMQP.OnAMQPConnect      := AMQPConnect;
  AMQP.OnAMQPBasicDeliver := AMQPBasicDeliver;

  WSClient.Active := True;
end;

procedure TForm1.AMQPConnect(Sender: TObject);
begin
  AMQP.OpenChannel('ch1');
  AMQP.DeclareExchange('ch1', 'orders', 'direct');
  AMQP.DeclareQueue('ch1', 'orders_in');
  AMQP.BindQueue('ch1', 'orders_in', 'orders', 'create');
  AMQP.Consume('ch1', 'orders_in');

  // Publish a message
  AMQP.PublishMessage('ch1', 'orders', 'create', '{"id":42}');
end;
uses
  sgcWebSocket, sgcWebSocket_Protocol_AMQP1_Client, sgcAMQP1_Classes;

var
  WSClient: TsgcWebSocketClient;
  AMQP1: TsgcWSPClient_AMQP1;
  oSession: TsgcAMQP1Session;
  oSender:  TsgcAMQP1SenderLink;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'broker.example.com';
  WSClient.Port := 5673;

  AMQP1 := TsgcWSPClient_AMQP1.Create(nil);
  AMQP1.Client := WSClient;

  AMQP1.OnAMQPConnect      := AMQPConnect;
  AMQP1.OnAMQPMessage      := AMQPMessage;
  AMQP1.OnAMQPSessionOpen  := AMQPSessionOpen;
  AMQP1.OnAMQPLinkOpen     := AMQPLinkOpen;

  WSClient.Active := True;

  oSession := AMQP1.CreateSession;
  oSender  := AMQP1.CreateSenderLink(oSession, '/queue/orders');
  // Receivers handle pushed deliveries through OnAMQPMessage
  AMQP1.CreateReceiverLink(oSession, '/queue/orders');
end;
#include "sgcWebSocket.hpp"
#include "sgcWebSocket_Protocol_AMQP_Client.hpp"

TsgcWebSocketClient* WSClient = new TsgcWebSocketClient(NULL);
WSClient->Host = "broker.example.com";
WSClient->Port = 15674;
WSClient->Options->Parameters = "/ws";

TsgcWSPClient_AMQP* AMQP = new TsgcWSPClient_AMQP(NULL);
AMQP->Client = WSClient;
AMQP->OnAMQPConnect = AMQPConnect;
AMQP->OnAMQPBasicDeliver = AMQPBasicDeliver;

WSClient->Active = true;

// In the OnAMQPConnect handler:
AMQP->OpenChannel("ch1");
AMQP->DeclareExchange("ch1", "orders", "direct");
AMQP->DeclareQueue("ch1", "orders_in");
AMQP->BindQueue("ch1", "orders_in", "orders", "create");
AMQP->Consume("ch1", "orders_in");
AMQP->PublishMessage("ch1", "orders", "create", "{\"id\":42}");

AMQP 0.9.1 또는 AMQP 1.0

버전 번호가 아니라 브로커를 기준으로 선택하세요. 상대가 RabbitMQ라면 AMQP 0.9.1 컴포넌트를 사용하세요: 익스체인지, 큐, 바인딩이라는 RabbitMQ 모델에 일대일로 대응돼요. 상대가 Azure Service Bus, Apache Qpid 또는 OASIS 표준을 알리는 다른 브로커라면 AMQP 1.0 컴포넌트와 그 세션 / 링크 모델을 사용하세요.

둘 다 같은 패키지로 제공되므로 혼합 환경도 문제없어요: 하나의 애플리케이션이 RabbitMQ로의 0.9.1 연결과 Azure Service Bus로의 1.0 연결을 나란히 유지할 수 있고, 각각 자체 TsgcWebSocketClient 캐리어를 사용해요.

sgcWebSockets의 AMQP 자세히 알아보기

AMQP 0.9.1 프로토콜 페이지

TsgcWSPClient_AMQP에 대한 전체 참조: 속성, 메서드, 이벤트 및 데모 프로젝트.

AMQP 1.0 프로토콜 페이지

TsgcWSPClient_AMQP1에 대한 전체 참조: 세션, 링크 및 CBS 인증.

실시간 선택기

언제 MQTT, WebSocket, SSE 또는 HTTP/2 푸시보다 AMQP를 선택할지.

블로그: 익스체인지와 큐

Delphi 코드로 설명하는 AMQP 0.9.1 라우팅 모델.

블로그: 메시지 발행

Delphi 클라이언트에서의 발행 패턴과 전달 옵션.

블로그: Azure Service Bus CBS 인증

AMQP 1.0을 통한 Azure Service Bus에 대한 Claims-Based-Security 토큰.

Best value: All-AccessEvery eSeGeCe product, Premium Support included, from €1,059/year.
See All-Access pricing

오늘 브로커에 연결하세요

체험판을 다운로드하세요. AMQP 0.9.1과 AMQP 1.0 데모 프로젝트가 바로 컴파일돼요.