Protocollo AMQP

Advanced Message Queuing Protocol per il messaging enterprise affidabile. Supporto completo di AMQP 0.9.1 e 1.0, compatibile con RabbitMQ e Azure Service Bus.

Cos'è AMQP?

AMQP è uno standard aperto per il messaging enterprise che garantisce un recapito dei messaggi affidabile e interoperabile tra piattaforme e implementazioni diverse.

Code di messaggi di livello enterprise

AMQP definisce un protocollo a livello wire per i middleware orientati ai messaggi, garantendo una vera interoperabilità tra le implementazioni dei diversi vendor. Il suo sofisticato modello di routing basato su exchange, code e binding supporta pattern di messaging complessi, fra cui direct routing, topic-based routing, fan-out e header-based routing. sgcWebSockets implementa sia AMQP 0.9.1 (la versione largamente diffusa usata da RabbitMQ) sia AMQP 1.0 (lo standard OASIS adottato da Azure Service Bus), offrendoti la massima flessibilità.

  • Protocollo wire-level che garantisce interoperabilità tra i vendor
  • Routing flessibile con exchange, code e binding
  • Recapito dei messaggi garantito tramite acknowledgment
  • Supporto sia per AMQP 0.9.1 sia per 1.0
PRODUCER EXCH Q1 Q2 CONSUMER

Caratteristiche di AMQP

Funzionalità di messaging di livello industriale per applicazioni mission-critical.

Recapito affidabile dei messaggi

I messaggi non vanno mai persi grazie ai publisher confirm e agli acknowledgment dei consumer, che assicurano garanzie di recapito end-to-end.

Modello Exchange/Queue/Binding

Routing flessibile tramite exchange direct, topic, fanout e headers collegati a code con routing key configurabili.

Acknowledgment dei messaggi

I consumer confermano esplicitamente i messaggi elaborati. I messaggi senza acknowledgment vengono automaticamente rimessi in coda per essere riconsegnati.

Transazioni

Raggruppa le operazioni di pubblicazione e acknowledgment in transazioni atomiche che vengono completate tutte o annullate tutte.

Controllo di flusso

Il controllo di flusso integrato impedisce ai producer veloci di sovraccaricare i consumer lenti, garantendo prestazioni stabili del sistema.

Multiplexing dei canali

Più canali logici su un'unica connessione TCP, riducendo l'overhead di connessione e mantenendo l'isolamento.

RabbitMQ e Azure Service Bus

Testato e verificato con RabbitMQ (AMQP 0.9.1) e Azure Service Bus (AMQP 1.0) per deployment in produzione.

Casi d'uso di AMQP

Scenari di messaging mission-critical in cui affidabilità e interoperabilità sono fondamentali.

Elaborazione di transazioni finanziarie

Elabora transazioni finanziarie con consegna garantita e semantica exactly-once per sistemi bancari e di pagamento.

Gestione degli ordini

Gestisci i flussi di ordini con un'affidabile messaggistica a code tra i sistemi di inserimento, evasione, spedizione e notifica.

Enterprise Service Bus

Costruisci un Enterprise Service Bus che colleghi sistemi eterogenei con un recapito di messaggi asincrono e affidabile.

Calcolo distribuito

Distribuisci il lavoro su più nodi di elaborazione con code di task e pattern di raccolta dei risultati.

Audit logging

Cattura e instrada gli eventi di audit verso i sistemi di logging con consegna garantita, assicurando che nessuna voce dell'audit trail venga persa.

Esempio AMQP in Delphi

Connettiti a un broker AMQP, dichiara code e scambia messaggi.

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;

Pronto a iniziare con AMQP?

Scarica la versione di prova gratuita e collegati ai message broker enterprise in pochi minuti.