AMQP 프로토콜

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

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을 시작할 준비가 되셨나요?

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