AMQP berichten ontvangen (3 / 3)

· Componenten

AMQP staat toe om berichten op 2 manieren te ontvangen:

Consume 

Consumers consumeren uit queues. Om berichten te kunnen consumeren, moet er een queue zijn. Wanneer een nieuwe consumer wordt toegevoegd en er al berichten klaarstaan in de queue, beginnen de afleveringen onmiddellijk.

De doel-queue kan leeg zijn op het moment dat de consumer wordt geregistreerd. In dat geval beginnen de afleveringen pas wanneer nieuwe berichten in de queue worden geplaatst.

Het consumeren van berichten is een asynchrone taak: elke keer dat een nieuw bericht aan de consumer-queue kan worden bezorgd, wordt het door de server automatisch naar de client gepusht. Lees ook een alternatieve methode om berichten synchroon te ontvangen.

De methode Consume maakt een nieuwe consumer aan in de queue, en elke keer dat er een nieuw bericht is, wordt dit automatisch bezorgd bij de consumer-client.

De methode heeft de volgende argumenten:


De berichten worden afgeleverd via de gebeurtenis 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; 

Berichten ophalen 

Het ophalen van berichten is een synchrone taak, wat betekent dat het de client is die aan de server vraagt of er berichten in de queue staan. Lees ook een alternatieve methode om berichten asynchroon te ontvangen.

De methode GetMessage stuurt een verzoek naar de AMQP-server om te vragen of er berichten beschikbaar zijn in een queue. Als er berichten zijn, worden deze verstuurd via de gebeurtenis OnAMQPBasicGetOk, en als de queue leeg is, wordt de gebeurtenis OnAMQPBasicGetEmpty aangeroepen.

De methode heeft de volgende argumenten:

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;