Recevoir des messages AMQP (3 / 3)

· Composants

AMQP permet de recevoir les messages selon 2 modes :

Consume 

Les consommateurs consomment depuis les files. Pour consommer des messages, il doit exister une file. Quand un nouveau consommateur est ajouté, en supposant qu'il y a déjà des messages prêts dans la file, les livraisons démarrent immédiatement.

La file cible peut être vide au moment de l'inscription du consommateur. Dans ce cas, les premières livraisons auront lieu quand de nouveaux messages seront mis en file.

Consommer des messages est une tâche asynchrone, ce qui signifie qu'à chaque fois qu'un nouveau message peut être livré à la file du consommateur, il est pushé automatiquement par le serveur au client. Tu peux consulter une méthode alternative pour recevoir des messages de manière synchrone.

La méthode Consume crée un nouveau consommateur sur la file et, à chaque nouveau message, celui-ci est livré automatiquement au client consommateur.

La méthode prend les arguments suivants :


Les messages sont livrés via l'événement 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; 

Récupérer des messages 

Récupérer des messages est une tâche synchrone, ce qui signifie que c'est le client qui demande au serveur s'il y a des messages dans la file. Tu peux consulter une méthode alternative pour recevoir des messages de manière asynchrone.

La méthode GetMessage envoie une requête au serveur AMQP pour savoir s'il y a des messages disponibles dans une file. S'il y a des messages, ils seront livrés via l'événement OnAMQPBasicGetOk et si la file est vide, l'événement OnAMQPBasicGetEmpty sera appelé.

La méthode prend les arguments suivants :

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;