&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 { /* ... */ } ?> ]]>