AMQP permet de recevoir les messages selon 2 modes :
- Requête par le client : via la méthode GetMessage. S'il n'y a pas de messages dans la file, l'événement OnAMQPBasicGetEmpty sera appelé.
- Pushé par le serveur : via la méthode Consume.
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 :
- ChannelName : nom du canal (doit être ouvert avant d'appeler cette méthode).
- QueueName : nom de la file ; ne doit pas dépasser 255 caractères et ne pas commencer par « amq. » (sauf si le paramètre passive est vrai).
- ConsumerTag : nom du consommateur, doit être unique. S'il n'est pas défini, le serveur en crée un.
- NoLocal : si vrai, le consommateur ne consomme jamais les messages publiés sur le même canal.
- NoAck : si vrai, le serveur n'attend pas d'accusé de réception pour chaque message livré.
- Exclusive : si vrai, empêche d'autres consommateurs de consommer les messages de cette file.
- NoWait : si vrai, le serveur n'enverra pas d'accusé de réception au client.
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 :
- ChannelName : nom du canal (doit être ouvert avant d'appeler cette méthode).
- QueueName : nom de la file ; ne doit pas dépasser 255 caractères et ne pas commencer par « amq. » (sauf si le paramètre passive est vrai).
- NoWait : si vrai, le serveur n'enverra pas d'accusé de réception au client.
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;
