(PECL stomp >= 0.1.0)
Stomp::ack -- stomp_ack — Valide la réception d'un message
Style orienté objet (méthode) :
Style procédural :
Valide la réception d'un message par une souscription.
link
Style procédural uniquement : L'identifiant stomp retourné par la fonctionstomp_connect().
msg
Le message où l'identifiant du message à valider.
headers
Tableau associatif contenant les en-têtes additionnels (exemple : receipt).
Exemple #1 Style orienté objet
<?php
$queue = '/queue/foo';
$msg = 'bar';
/* connexion */
try {
$stomp = new Stomp('tcp://localhost:61613');
} catch(StompException $e) {
die('Connection failed: ' . $e->getMessage());
}
/* envoi d'un message à la file 'foo' */
$stomp->send($queue, $msg);
/* souscription aux messages de la file 'foo' */
$stomp->subscribe($queue);
/* lecture d'un message */
$frame = $stomp->readFrame();
if ($frame->body === $msg) {
/* confirmation de la réception du message */
$stomp->ack($frame);
}
/* supprime la souscription à la file 'foo' */
$stomp->unsubscribe($queue);
/* fermeture de la connexion */
unset($stomp);
?>
Exemple #2 Style procédural
<?php
$queue = '/queue/foo';
$msg = 'bar';
/* connexion */
$link = stomp_connect('ssl://localhost:61612');
/* vérification de la connexion */
if (!$link) {
die('Connection failed: ' . stomp_connect_error());
}
/* début de la transaction */
stomp_begin($link, 't1');
/* envoi d'un message à la file 'foo' */
stomp_send($link, $queue, $msg, array('transaction' => 't1'));
/* validation de la transaction */
stomp_commit($link, 't1');
/* souscription aux messages de la file 'foo' */
stomp_subscribe($link, $queue);
/* lecture d'un message */
$frame = stomp_read_frame($link);
if ($frame['body'] === $msg) {
/* confirmation de la réception du message */
stomp_ack($link, $frame['headers']['message-id']);
}
/* supprime la souscription à la file 'foo' */
stomp_unsubscribe($link, $queue);
/* fermeture de la connexion */
stomp_close($link);
?>
Note:
Un en-tête de transaction peut être spécifié, indiquant que la confirmation des messages doit faire partie de la transaction.
Stomp est, par nature, asynchrone. Une communication synchrone peut être implémentée en ajoutant un en-tête receipt
. Ceci fera que les méthodes ne retourneront rien tant que le message de confirmation n'aura pas été reçu ou tant que le délai d'attente ne sera pas atteint.