AMQP-Nachrichten empfangen (3 / 3)

· Komponenten

AMQP erlaubt das Empfangen von Nachrichten in 2 Modi:

Consume 

Consumer konsumieren aus Queues. Um Nachrichten zu konsumieren, muss eine Queue vorhanden sein. Wird ein neuer Consumer hinzugefügt und sind bereits Nachrichten in der Queue, beginnt die Auslieferung sofort.

Die Ziel-Queue kann zum Zeitpunkt der Consumer-Registrierung leer sein. In diesem Fall erfolgen die ersten Auslieferungen, sobald neue Nachrichten in die Queue eingereiht werden.

Das Konsumieren von Nachrichten ist eine asynchrone Aufgabe: Jedes Mal, wenn eine neue Nachricht an die Consumer-Queue ausgeliefert werden kann, wird sie vom Server automatisch an den Client gepusht. Du kannst eine alternative Methode lesen, um Nachrichten synchron zu empfangen.

Die Methode Consume erstellt einen neuen Consumer in der Queue, und jedes Mal, wenn eine neue Nachricht eintrifft, wird sie automatisch an den Consumer-Client ausgeliefert.

Die Methode hat folgende Argumente:


Die Nachrichten werden über das Ereignis OnAMQPBasigGetOk ausgeliefert.

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; 

Nachrichten abrufen 

Das Abrufen von Nachrichten ist eine synchrone Aufgabe: Der Client fragt den Server, ob Nachrichten in der Queue vorhanden sind. Du kannst eine alternative Methode lesen, um Nachrichten asynchron zu empfangen.

Die Methode GetMessage sendet eine Anfrage an den AMQP-Server, ob Nachrichten in einer Queue verfügbar sind. Sind Nachrichten vorhanden, werden sie über das Ereignis OnAMQPBasicGetOk ausgeliefert. Ist die Queue leer, wird das Ereignis OnAMQPBasicGetEmpty ausgelöst.

Die Methode hat folgende Argumente:

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;