Delphi 및 C++ Builder용 AMQP 클라이언트 | eSeGeCe

AMQP 프로토콜

안정적인 엔터프라이즈 메시징을 위한 Advanced Message Queuing Protocol이에요. AMQP 0.9.1 및 1.0을 완전 지원하며 RabbitMQ 및 Azure Service Bus와 호환돼요.

빠른 답변: TsgcAMQPClient 컴포넌트는 Delphi 및 C++ Builder 앱을 AMQP 브로커에 연결하며, RabbitMQ 및 Azure Service Bus를 대상으로 채널, exchange, 큐, 확인 응답, 트랜잭션을 갖춘 AMQP 0.9.1과 AMQP 1.0을 모두 구현해요.

AMQP이란?

AMQP은 서로 다른 플랫폼과 구현 간에 안정적이고 상호 운용 가능한 메시지 전달을 제공하는 엔터프라이즈 메시징 오픈 표준이에요.

엔터프라이즈급 메시지 큐잉

AMQP은 메시지 지향 미들웨어를 위한 와이어 레벨 프로토콜을 정의해 서로 다른 벤더 구현 간의 진정한 상호 운용성을 보장해요. exchange, queue, binding 기반의 정교한 라우팅 모델은 direct 라우팅, 토픽 기반 라우팅, fan-out, 헤더 기반 라우팅을 포함한 복잡한 메시징 패턴을 지원해요. sgcWebSockets은 RabbitMQ에서 널리 사용되는 AMQP 0.9.1과 Azure Service Bus에서 사용되는 OASIS 표준 AMQP 1.0을 모두 구현해 최대한의 유연성을 제공해요.

  • 와이어 레벨 프로토콜이 벤더 간 상호 운용성을 보장
  • exchange, queue, binding을 사용한 유연한 라우팅
  • 확인(acknowledgment)을 통한 메시지 전달 보장
  • AMQP 0.9.1 및 1.0 모두 지원
PRODUCER EXCH Q1 Q2 CONSUMER

AMQP 기능

미션 크리티컬 애플리케이션을 위한 산업 강도의 메시징 기능이에요.

안정적인 메시지 전달

발행자 confirm과 컨슈머 acknowledgment가 종단 간 전달을 보장해 메시지를 절대 잃지 않아요.

Exchange/Queue/Binding 모델

구성 가능한 라우팅 키로 큐에 바인딩된 direct, topic, fanout, headers exchange를 통한 유연한 라우팅이에요.

메시지 확인

컨슈머가 처리된 메시지를 명시적으로 확인해요. 미확인 메시지는 자동으로 다시 큐에 들어가 재전달돼요.

트랜잭션

발행과 확인 작업을 원자적 트랜잭션으로 묶어 모두 성공하거나 모두 롤백되도록 해요.

플로우 제어

내장된 플로우 제어가 빠른 프로듀서가 느린 컨슈머를 압도하지 않도록 해 시스템 성능을 안정적으로 유지해요.

채널 다중화

단일 TCP 연결 위에 여러 논리 채널을 두어 연결 오버헤드를 줄이면서 격리를 유지해요.

RabbitMQ 및 Azure Service Bus

프로덕션 배포를 위해 RabbitMQ(AMQP 0.9.1) 및 Azure Service Bus(AMQP 1.0)에서 테스트 및 검증되었어요.

AMQP 사용 사례

안정성과 상호 운용성이 가장 중요한 미션 크리티컬 메시징 시나리오예요.

금융 거래 처리

은행 및 결제 시스템을 위해 전달 보장과 exactly-once 시맨틱으로 금융 거래를 처리해요.

주문 관리

주문 입력, 이행, 배송, 알림 시스템 간의 안정적인 메시지 큐잉으로 주문 워크플로우를 관리해요.

엔터프라이즈 서비스 버스

안정적인 비동기 메시지 전달로 이질적인 시스템을 연결하는 엔터프라이즈 서비스 버스를 구축해요.

분산 컴퓨팅

작업 큐와 결과 수집 패턴으로 여러 처리 노드에 작업을 분산해요.

감사 로깅

전달 보장과 함께 감사 이벤트를 로깅 시스템으로 캡처하고 라우팅해 감사 추적 항목을 잃지 않아요.

Delphi AMQP 예제

AMQP 브로커에 연결하고, 큐를 선언하고, 메시지를 주고받으세요.

uses
  sgcAMQP_Client, sgcAMQP_Classes;

var
  AMQPClient: TsgcAMQPClient;

procedure TForm1.FormCreate(Sender: TObject);
begin
  AMQPClient := TsgcAMQPClient.Create(nil);
  AMQPClient.Host := 'rabbitmq.example.com';
  AMQPClient.Port := 5672;
  AMQPClient.Authentication.Username := 'guest';
  AMQPClient.Authentication.Password := 'guest';
  AMQPClient.VirtualHost := '/';

  // Set up event handlers
  AMQPClient.OnAMQPConnect := OnAMQPConnect;
  AMQPClient.OnAMQPMessage := OnAMQPMessage;
  AMQPClient.Connect;
end;

procedure TForm1.OnAMQPConnect(Sender: TObject);
begin
  // Open a channel
  AMQPClient.OpenChannel(1);

  // Declare a queue
  AMQPClient.DeclareQueue(1, 'orders',
    False, True, False, False);

  // Start consuming messages
  AMQPClient.BasicConsume(1, 'orders',
    'consumer-1', False, False, False, False);
end;

procedure TForm1.OnAMQPMessage(Sender: TObject;
  aChannel: Integer; aMessage: TsgcAMQPMessage);
begin
  // Process the message
  Memo1.Lines.Add('Received: ' + aMessage.Body);

  // Acknowledge the message
  AMQPClient.BasicAck(aChannel, aMessage.DeliveryTag, False);
end;

procedure TForm1.ButtonPublishClick(Sender: TObject);
begin
  // Publish a message to the default exchange
  AMQPClient.BasicPublish(1, '', 'orders',
    '{"orderId": 67890, "total": 99.95}');
end;

AMQP 자주 묻는 질문

Delphi 및 C++ Builder에서의 AMQP 메시지 큐잉에 대해 자주 묻는 질문이에요.

TsgcAMQPClient를 생성하고, Host, Port, Authentication, VirtualHost를 설정한 다음 Connect를 호출하세요. OnAMQPConnect 이벤트에서 OpenChannel로 채널을 열고, DeclareQueue로 큐를 선언하고, BasicConsume으로 수신을 시작해요. BasicPublish로 메시지를 보내고 BasicAck로 확인해요.
클라이언트는 RabbitMQ에서 널리 사용되는 AMQP 0.9.1과 Azure Service Bus에서 사용되는 OASIS 표준인 AMQP 1.0을 모두 구현해요. 프로덕션 배포를 위해 RabbitMQ 및 Azure Service Bus를 대상으로 테스트 및 검증되었으며, 와이어 수준 프로토콜이 다른 호환 브로커와의 상호 운용성을 보장해요.
네. 발행자 확인과 소비자 확인 응답이 종단 간 전달을 보장하고, 확인되지 않은 메시지는 자동으로 다시 큐에 들어가며, 발행과 확인 작업을 원자적 트랜잭션으로 그룹화할 수 있어요. exchange, 큐, 바인딩 모델은 direct, topic, fanout, headers 라우팅을 지원하며, 단일 연결을 통한 채널 멀티플렉싱을 제공해요.
sgcWebSockets는 Delphi 7부터 최신 Delphi 릴리스까지, 그리고 해당하는 C++ Builder 버전을 Windows, macOS, Linux, iOS, Android에서 지원해요. 무료 체험판을 다운로드하여 직접 프로젝트에서 AMQP 클라이언트를 평가해 보세요.

AMQP을 시작할 준비가 되셨나요?

무료 체험판을 다운로드하고 몇 분 만에 엔터프라이즈 메시지 브로커에 연결해 보세요.