Ricevere messaggi AMQP (3 / 3)

· Componenti

AMQP permette di ricevere i messaggi in 2 modalità:

Consume 

I consumer consumano dalle code. Per consumare messaggi deve esistere una coda. Quando si aggiunge un nuovo consumer, se nella coda ci sono già messaggi pronti, le consegne iniziano immediatamente.

La coda di destinazione può essere vuota al momento della registrazione del consumer. In tal caso le prime consegne avverranno quando verranno accodati nuovi messaggi.

Consumare messaggi è un'operazione asincrona: ogni volta che un nuovo messaggio può essere consegnato alla coda del consumer, viene inviato dal server al client automaticamente. Puoi leggere un metodo alternativo per ricevere messaggi in modo sincrono.

Il metodo Consume crea un nuovo consumer sulla coda; ogni volta che arriva un nuovo messaggio, questo viene consegnato automaticamente al client consumer.

Il metodo ha i seguenti argomenti:


I messaggi vengono consegnati tramite l'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; 

Get Messages 

Ottenere messaggi è un'operazione sincrona: è il client a chiedere al server se ci sono messaggi nella coda. Puoi leggere un metodo alternativo per ricevere messaggi in modo asincrono.

Il metodo GetMessage invia una richiesta al server AMQP chiedendo se ci sono messaggi disponibili in una coda. Se ci sono messaggi, vengono inviati tramite l'evento OnAMQPBasicGetOk; se la coda è vuota, viene chiamato l'evento OnAMQPBasicGetEmpty.

Il metodo ha i seguenti argomenti:

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;