AMQP 프로토콜
안정적인 엔터프라이즈 메시징을 위한 Advanced Message Queuing Protocol이에요. AMQP 0.9.1 및 1.0을 완전 지원하며 RabbitMQ 및 Azure Service Bus와 호환돼요.
안정적인 엔터프라이즈 메시징을 위한 Advanced Message Queuing Protocol이에요. AMQP 0.9.1 및 1.0을 완전 지원하며 RabbitMQ 및 Azure Service Bus와 호환돼요.
AMQP은 서로 다른 플랫폼과 구현 간에 안정적이고 상호 운용 가능한 메시지 전달을 제공하는 엔터프라이즈 메시징 오픈 표준이에요.
AMQP은 메시지 지향 미들웨어를 위한 와이어 레벨 프로토콜을 정의해 서로 다른 벤더 구현 간의 진정한 상호 운용성을 보장해요. exchange, queue, binding 기반의 정교한 라우팅 모델은 direct 라우팅, 토픽 기반 라우팅, fan-out, 헤더 기반 라우팅을 포함한 복잡한 메시징 패턴을 지원해요. sgcWebSockets은 RabbitMQ에서 널리 사용되는 AMQP 0.9.1과 Azure Service Bus에서 사용되는 OASIS 표준 AMQP 1.0을 모두 구현해 최대한의 유연성을 제공해요.
미션 크리티컬 애플리케이션을 위한 산업 강도의 메시징 기능이에요.
발행자 confirm과 컨슈머 acknowledgment가 종단 간 전달을 보장해 메시지를 절대 잃지 않아요.
구성 가능한 라우팅 키로 큐에 바인딩된 direct, topic, fanout, headers exchange를 통한 유연한 라우팅이에요.
컨슈머가 처리된 메시지를 명시적으로 확인해요. 미확인 메시지는 자동으로 다시 큐에 들어가 재전달돼요.
발행과 확인 작업을 원자적 트랜잭션으로 묶어 모두 성공하거나 모두 롤백되도록 해요.
내장된 플로우 제어가 빠른 프로듀서가 느린 컨슈머를 압도하지 않도록 해 시스템 성능을 안정적으로 유지해요.
단일 TCP 연결 위에 여러 논리 채널을 두어 연결 오버헤드를 줄이면서 격리를 유지해요.
프로덕션 배포를 위해 RabbitMQ(AMQP 0.9.1) 및 Azure Service Bus(AMQP 1.0)에서 테스트 및 검증되었어요.
안정성과 상호 운용성이 가장 중요한 미션 크리티컬 메시징 시나리오예요.
은행 및 결제 시스템을 위해 전달 보장과 exactly-once 시맨틱으로 금융 거래를 처리해요.
주문 입력, 이행, 배송, 알림 시스템 간의 안정적인 메시지 큐잉으로 주문 워크플로우를 관리해요.
안정적인 비동기 메시지 전달로 이질적인 시스템을 연결하는 엔터프라이즈 서비스 버스를 구축해요.
작업 큐와 결과 수집 패턴으로 여러 처리 노드에 작업을 분산해요.
전달 보장과 함께 감사 이벤트를 로깅 시스템으로 캡처하고 라우팅해 감사 추적 항목을 잃지 않아요.
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;