AMQP Recibir mensajes (3 / 3)

· Componentes

AMQP permite recibir mensajes en 2 modos:

Consume 

Los consumidores consumen de las colas. Para consumir mensajes debe existir una cola. Cuando se añade un nuevo consumidor, asumiendo que ya hay mensajes listos en la cola, las entregas comenzarán de inmediato.

La cola de destino puede estar vacía en el momento de registrar el consumidor. En ese caso, las primeras entregas se producirán cuando se encolen nuevos mensajes.

Consumir mensajes es una tarea asíncrona, lo que significa que cada vez que un nuevo mensaje pueda entregarse a la cola del consumidor, el servidor lo envía al cliente automáticamente. Puedes leer un método alternativo para recibir mensajes de forma síncrona.

El método Consume crea un nuevo consumidor en la cola y cada vez que llega un nuevo mensaje, este se entrega automáticamente al cliente consumidor.

El método tiene los siguientes argumentos:


Los mensajes se entregan en el evento OnAMQPBasigGetOk.

AMQP.Consume('channel_name', 'exchange_name', 'consumer_tag');
procedure OnAMQPBasicGetOk(Sender: TObject; const aChannel: string; const aGetOk: TsgcAMQPFramePayload_Method_BasicGetOk; const aContent: TsgcAMQPMessageContent);
begin
  DoLog('#AMQP_basic_GetOk: ' + aChannel + ' ' + IntToStr(aGetOk.MessageCount) + ' ' + aContent.Body.AsString);
end; 

Obtener mensajes 

Obtener mensajes es una tarea síncrona, lo que significa que es el cliente quien pregunta al servidor si hay mensajes en la cola. Puedes leer un método alternativo para recibir mensajes de forma asíncrona.

El método GetMessage envía una solicitud al servidor AMQP preguntando si hay mensajes disponibles en una cola. Si hay mensajes, se entregarán en el evento OnAMQPBasicGetOk y si la cola está vacía, se disparará el evento OnAMQPBasicGetEmpty.

El método tiene los siguientes argumentos:

AMQP.GetMessage('channel_name', 'exchange_name');
procedure OnAMQPBasicGetOk(Sender: TObject; const aChannel: string; const aGetOk: TsgcAMQPFramePayload_Method_BasicGetOk; const aContent: TsgcAMQPMessageContent);
begin
  DoLog('#AMQP_basic_GetOk: ' + aChannel + ' ' + IntToStr(aGetOk.MessageCount) + ' ' + aContent.Body.AsString);
end;
procedure OnAMQPBasicGetEmpty(Sender: TObject; const aChannel: string);
begin
  DoLog('#AMQP_basic_GetEmpty: ' + aChannel);
end;