&reftitle.examples;
Connexions
Afin d'exécuter des fonctions de messageries et de mise en file d'attente, une connexion
doit être établie avec un serveur de messagerie en créant un objet SAMConnection et en
appelant sa méthode "connect", avec quelques propriétés de connexion, afin de connecter
le script PHP au serveur de messagerie. Pendant le temps où l'objet SAMConnection n'est
pas détruit, la connexion sera maintenue et disponible. Tous les objets SAMConnection seront
détruis lorsque le script PHP se terminera.
Quelques propriétés par défaut peuvent être utilisées pour la connexion au serveur de
messagerie mais le script PHP doit spécifier au minimum le protocole à utiliser.
Création d'une connexion et connexion à un serveur de messagerie
distant WebSphere MQSeries
connect(SAM_WMQ, array(SAM_HOST => 'myhost.mycompany.com',
SAM_PORT => 1506,
SAM_BROKER => 'mybroker'));
?>
]]>
Création d'une connexion et connexion à un serveur distant WebSphere Application
connect(SAM_WPM, array(SAM_ENDPOINTS => 'localhost:7278:BootstrapBasicMessaging',
SAM_BUS => 'Bus1',
SAM_TARGETCHAIN => 'InboundBasicMessaging'));
?>
]]>
Création d'un connexion et connexion à un serveur MQTT
connect(SAM_MQTT, array(SAM_HOST => 'myhost.mycompany.com',
SAM_PORT => 1883));
?>
]]>
Messages
Les messages envoyés et reçus depuis les files d'attente sont représentés par l'objet
SAMMessage. L'objet SAMMessage contient le corps du message (s'il existe) ainsi que
les propriétés des en-têtes associés au message. L'objet SAMMessage est soit fourni
en tant que paramètre d'une opération sur un message, ou retourné comme résultat.
Création d'un message avec un corps texte simple
]]>
Les messages doivent avoir des propriétés d'en-têtes associés, qui permettent le contrôle
du transport du message ou fournissent des informations futures sur l'application réceptrice.
Par défaut, les propriétés des messages sont délivrées au système de messagerie sous la
forme de chaînes de caractères et dans ce cas, peuvent être définies comme ceci :
Définition d'une propriété de formatage de texte en utilisant la syntaxe par défaut
header->myPropertyName = 'textData';
?>
]]>
Si vous voulez passer des informations sur le type, une syntaxe alternative peut être
utilisée où la valeur et le type sont passés dans un tableau associatif :
Définition d'une propriété en spécifiant le type
header->myPropertyName = array(3.14159, SAM_FLOAT);
?>
]]>
Les propriétés peuvent également être extraites depuis l'en-tête d'un message.
Récupération d'une propriété depuis l'en-tête d'un message
header->myPropertyName;
?>
]]>
Opérations de messagerie
Toutes les opérations de messagerie sont exécutées via des appels aux méthodes sur l'objet
de connexion. Pour ajouter un message à la file d'attente, la méthode "send"
est utilisée, tandis que pour obtenir un message depuis la file d'attente, la méthode
"receive" est utilisée. D'autres méthodes offrent d'autres fonctionnalités
comme la publication, la souscription ou encore le contrôle sur les transactions.
Ajout d'un message à la file d'attente et réception de la réponse
header->SAM_REPLY_TO = 'queue://receive/test';
$correlid = $conn->send('queue://send/test', $msg);
if (!$correlid) {
// The Send failed!
echo "Send failed ($conn->errno) $conn->error";
} else {
$resp = $conn->receive('queue://receive/test', array(SAM_CORRELID => $correlid));
}
?>
]]>
Publication/Souscription à un sujet
SAM permet d'envoyer des messages soit à la file d'attente, ou, pour WebSphere
MQ et WPM, de publier/souscrire à des sujets. L'envoi à un sujet est spécifié
à SAM de la façon habituelle, i.e. sous la forme 'topic://fred', plutôt que
sous la forme 'queue://AQUEUE', utilisée pour une opération de point à point.
Pour publier/souscrire, il est tout simplement nécessaire de spécifier le correct
du courtier lors de l'appel à la méthode "connect" de l'objet SAMConnect et le
sujet désiré dans l'argument de destination des appels aux méthodes "send" et
"receive" de l'objet SAMConnect. L'interface PHP est cependant identique au
model point à point.
Par défaut, SAM crée des souscriptions non durables lors de l'utilisation des
fonctionnalités de publication/souscription. Cela signifie que si l'application
cliente est inactive lorsque les messages sont publiés sur un sujet, alors il
ne les recevra pas lorsqu'il redemarrera. SAM permet également des souscriptions
durables à un sujet lors de l'utilisation de WPM ou WebSphere. Le but de ces
souscriptions est de permettre aux données d'être reçues par une application
cliente même si le client n'est plus actif au moment où les données sont publiées.
Les souscriptions durables sont spécifiées en utilisant l'appel à la méthode
"suscribe" de l'objet SAMConnect. Cette méthode prend le sujet destinataire en
tant qu'argument d'entrée et retourne l'identifiant de souscription qui pourra
être utilisé lors des prochains appels à la méthode "receive". Lorsque la
souscription n'est plus nécessaire, la méthode "unsubscribe" de l'objet
SAMConnection dot être utilisée pour effacer la souscription.
Création d'une souscription durable à un sujet
subscribe('topic://A');
if (!$subName) {
echo "Échec de la souscription";
} else {
# Souscription Ok
// ...
}
?>
]]>
Souscription à un sujet en utilisant un serveur WebSphere Platform Messaging (WPM)
connect(SAM_WMQ, array(SAM_ENDPOINTS => 'localhost:7278:BootstrapBasicMessaging',
SAM_BUS => 'Bus1',
SAM_TARGETCHAIN => 'InboundBasicMessaging',
SAM_WPM_DUR_SUB_HOME => 'MyMachineNode01.server1-Bus1'));
$subName = $conn->subscribe('topic://A');
if (!$subName) {
echo "Échec de la souscription";
} else {
# Souscription Ok
// ...
}
?>
]]>
Réception des données publiées en utilisant une souscription durable
receive($subName);
if ($msg) {
echo "Réception d'un message Ok";
} else {
echo "Échec de la réception";
}
?>
]]>
Effacement d'une souscription durable à un sujet
unsubscribe($subName)) {
echo "Échec lors de l'effacement de la souscription";
}
?>
]]>
Gestion des erreurs
Toutes les méthodes SAMConnection qui fournissent un accès aux opérations
de messagerie retourne &false; si une erreur survient durant le processus.
En plus de cela, l'objet SAMConnection a deux propriétés, "errno" et "error",
qui fournissent respectivement le numéro et la description de la dernière
erreur survenue sur la connexion.
Gestion d'une erreur depuis une méthode qui ne retourne aucun résultat
commit()) {
// Le commit a échoué !
echo "Le commit a échoué : ($conn->errno) $conn->error";
}
?>
]]>
Gestion d'une erreur depuis une méthode qui retourne un résultat
send('queue://send/test', $msg);
if (!$correlid) {
//L'envoi a échoué !
echo "L'envoi a échoué : ($conn->errno) $conn->error";
} else {
/* ... */
}
?>
]]>