Publicar/Suscribir y suscripción a temas (topics)

SAM permite enviar mensajes a colas, o para WebSphere MQ y WPM, publicar/suscribir temas. El envío a un tema es especificado por SAM de la manera habitual, p.e. de la forma 'topic://fred', mejor que de la forma 'queue://AQUEUE' utilizada para operaciones punto a punto. Para publicar/suscribir únicamente es necesario especificar el nombre del broker correcto en la llamada al método "connect" del objeto SAMConnect y el tema deseado en el argumento de destino de las llamadas a los métodos "send" y "receive" del objeto SAMConnect. La interface PHP es sin embargo idéntica al modelo punto a punto.

Por defecto, SAM crea suscripciones no duraderas cuando se utiliza publicar/suscribir. Esto significa que si una aplicación cliente está inactiva cuando los mensajes se publiquen en un tema, entonces esta aplicación no los recibirá cuando sea reactivada. SAM también permite realizar suscripciones duraderas a temas cuando se usa el publicar/suscribir de WPM o WebSphere MQ. El objetivo de estas suscripciones es permitir que los datos sean recibidos por una aplicación cliente incluso si este cliente no estaba activo en el momento de publicación de los datos.

Las suscripciones duraderas se especifican utilizando el método "subscribe" del objeto SAMConnect. Este método toma el tema de destino como un parámetro de entrada y devuelve un identificador de suscripción que puede ser utilizado en siguientes llamadas "receive". Cuando la suscripción ya no se necesita, debe utilizarse el método "unsubscribe" del objeto SAMConnection para eliminar la suscripción.

Ejemplo #1 Creación de una suscripción duradera a un tema

<?php

$subName 
$conn->subscribe('topic://A');

if (!
$subName) {
   echo 
"Subscribe fallido";
} else {
   
# Subscribe OK
   // ...
}
?>

Ejemplo #2 Suscripción a un tema utilizando un servidor WebSphere Platform Messaging (WPM)

<?php
$conn 
= new SAMConnection();
// Nota: Para pub/sub en WPM, al conectar al nombre de un motor de mensajería,
//   para mantener la suscrición duradera debe especificarse(SAM_WPM_DUR_SUB_HOME).
$conn->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 
"Subscribe fallido";
} else {
   
# Subscribe OK
   // ...
}
?>

Ejemplo #3 Recepción de datos publicados utilizando una suscripción duradera

<?php

$msg 
$conn->receive($subName);
if (
$msg) {
   echo 
"Mensaje recibido OK";
} else {
   echo 
"El receive falló";
}

?>

Ejemplo #4 Eliminación de una suscripción duradera a un tema

<?php

if (!$conn->unsubscribe($subName)) {
   echo 
"Unsubscribe fallido";
}

?>