AMQP Receber mensagens (3 / 3)

· Componentes

AMQP allows para receber o messages em 2 modes:

Consumir 

Consumers consume um partir de queues. Para consume messages there has para be uma fila. When um novo consumer is added, assuming there are already messages ready no queue, deliveries will iniciar immediately.

The target queue pode ser empty no time de consumer registration. In that case first deliveries will happen when new messages are enqueued.

Consuming messages is um asynchronous task, o que significa that every time um novo message pode ser delivered para o consumer queue, it's pushed por o servidor para o cliente automaticamente. Você pode read um alternative method para Receber Message Synchronously.

O método Consume creates um novo consumer no queue, e every time there is um novo message this será delivered automaticamente para o consumer client.

O método tem os seguintes argumentos:


The messages are delivered OnAMQPBasigGetOk event.

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; 

Obter Mensagens 

Getting messages is um Synchronous task, o que significa that is o cliente who ask para server is there are messages no queue. Você pode read um alternative method para Receber Message Aynchronously.

O método GetMessage sends um request para o servidor AMQP asking if there are messages available em uma fila. If there are messages these será dispatched OnAMQPBasicGetOk event e if um fila is empty, o evento OnAMQPBasicGetEmpty será chamado.

O método tem os seguintes 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;