1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 16:32:13 +01:00
Files
archived-doc-es/reference/sam/examples.xml
Pedro Antonio Gil Rodríguez 311fdd07ca Correcciones menores
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@337250 c90b9560-bf6c-de11-be94-00142212c4b1
2015-07-28 11:43:58 +00:00

360 lines
11 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a56106f69198dfe88c6084593c78a71c26b24353 Maintainer: regiemix Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="sam.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.examples;
<section xml:id="sam.connections">
<title>Conexiones</title>
<para>
Para realizar las funciones de mensajería y encolado de los mensajes,
se debe establecer una conexión con un servidor de mensajería creando un objeto SAMConnection
y llamando a su método "connect" , con un conjunto de propiedades
de conexión, para conectar el script PHP script al servidor de mensajería. Durante
el tiempo que el objeto SAMConnection no sea destruído, la conexión
estará activa y disponible para ser utilizada. Todos los objetos SAMConnection
serán destruídos cuando el script PHP finalice.
</para>
<para>
Se utilizarán el conjunto de propiedades por defecto en la conexión a un servidor
de mensajería, pero el script PHP debe especificar como mínimo el protocolo que será
utilizado.
</para>
<para>
<example>
<title>Creación de una conexión y conexión a un servidor de mensajería remoto WebSphere MQSeries</title>
<programlisting role="php">
<![CDATA[
<?php
$conn = new SAMConnection();
$conn->connect(SAM_WMQ, array(SAM_HOST => 'myhost.mycompany.com',
SAM_PORT => 1506,
SAM_BROKER => 'mybroker'));
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Creación de una conexión y conexión a un servidor remoto WebSphere Application Server</title>
<programlisting role="php">
<![CDATA[
<?php
$conn = new SAMConnection();
$conn->connect(SAM_WPM, array(SAM_ENDPOINTS => 'localhost:7278:BootstrapBasicMessaging',
SAM_BUS => 'Bus1',
SAM_TARGETCHAIN => 'InboundBasicMessaging'));
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Creación de una conexión y conexión a un servidor MQTT</title>
<programlisting role="php">
<![CDATA[
<?php
$conn = new SAMConnection();
$conn->connect(SAM_MQTT, array(SAM_HOST => 'myhost.mycompany.com',
SAM_PORT => 1883));
?>
]]>
</programlisting>
</example>
</para>
</section> <!-- xml:id=sam.connections -->
<section xml:id="sam.messages">
<title>Mensajes</title>
<para>
Los mensajes enviados y recibidos de las colas, se representan por el objeto
SAMMessage. El objeto SAMMessage encapsula el cuerpo del
mensaje (si existe alguno) y las propiedades de cabecera asociadas al
mensaje. Un objeto SAMMessage es proporcionado como un parámetro a una operación de mensajería o
devuelto como un resultado.
</para>
<para>
<example>
<title>Creación de un mensaje con un cuerpo de texto simple</title>
<programlisting role="php">
<![CDATA[
<?php
$msg = new SAMMessage('Este es un mensaje de texto simple');
?>
]]>
</programlisting>
</example>
</para>
<para>
Los mensajes deben tener las propiedades de cabecera asociadas, lo que permitirá tener
control sobre el transporte del mensaje o información futura sobre la
aplicación receptora. Por defecto las propiedades del mensaje se distribuirán al
sistema de mensajería como strings y en ese caso pueden ser
definidas con la siguiente sintaxis sencilla:
</para>
<para>
<example>
<title>Definición de una propiedad de formateado de texto utilizando la sintaxis por defecto</title>
<programlisting role="php">
<![CDATA[
<?php
$msg->header->myPropertyName = 'textData';
?>
]]>
</programlisting>
</example>
</para>
<para>
Si se desea pasar la información de tipo, se puede utilizar
una sintaxis alternativa, donde el valor y la declaración de tipo son pasados en un array
asociativo:
</para>
<para>
<example>
<title>Establecer una propiedad empleando una declaración de tipo</title>
<programlisting role="php">
<![CDATA[
<?php
$msg->header->myPropertyName = array(3.14159, SAM_FLOAT);
?>
]]>
</programlisting>
</example>
</para>
<para>
Las propiedades también pueden extraerse de la cabecera del mensaje.
</para>
<para>
<example>
<title>Recuperación de una propiedad desde la cabecera del mensaje</title>
<programlisting role="php">
<![CDATA[
<?php
$myProperty = $msg->header->myPropertyName;
?>
]]>
</programlisting>
</example>
</para>
</section> <!-- xml:id=sam.messages -->
<section xml:id="sam.operations">
<title>Operaciones de mensajería</title>
<para>
Todas las operaciones de mensajería se realizan a través de llamadas a métodos sobre el
objeto de conexión.
Para añadir un mensaje a una cola se utiliza en método "send" , para obtener un
mensaje de una cola se utiliza el método "receive". Otros métodos
proporcionan otras funcionalidades como la publicación, suscripción o el control
sobre las transacciones.
</para>
<para>
<example>
<title>Añadir un mensaje a una cola y recibir una respuesta</title>
<programlisting role="php">
<![CDATA[
<?php
$msg = new SAMMessage('Este es un mensaje simple de texto');
$msg->header->SAM_REPLY_TO = 'queue://receive/test';
$correlid = $conn->send('queue://send/test', $msg);
if (!$correlid) {
// El Send falló!
echo "Send fallido ($conn->errno) $conn->error";
} else {
$resp = $conn->receive('queue://receive/test', array(SAM_CORRELID => $correlid));
}
?>
]]>
</programlisting>
</example>
</para>
</section> <!-- xml:id=sam.operations -->
<section xml:id="sam.pubsub">
<title>Publicar/Suscribir y suscripción a temas (topics)</title>
<para>
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.
</para>
<para>
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.
</para>
<para>
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.
</para>
<para>
<example>
<title>Creación de una suscripción duradera a un tema</title>
<programlisting role="php">
<![CDATA[
<?php
$subName = $conn->subscribe('topic://A');
if (!$subName) {
echo "Subscribe fallido";
} else {
# Subscribe OK
// ...
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Suscripción a un tema utilizando un servidor WebSphere Platform Messaging (WPM)</title>
<programlisting role="php">
<![CDATA[
<?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
// ...
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Recepción de datos publicados utilizando una suscripción duradera</title>
<programlisting role="php">
<![CDATA[
<?php
$msg = $conn->receive($subName);
if ($msg) {
echo "Mensaje recibido OK";
} else {
echo "El receive falló";
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Eliminación de una suscripción duradera a un tema</title>
<programlisting role="php">
<![CDATA[
<?php
if (!$conn->unsubscribe($subName)) {
echo "Unsubscribe fallido";
}
?>
]]>
</programlisting>
</example>
</para>
</section> <!-- xml:id=sam.pubsub -->
<section xml:id="sam.errors">
<title>Control de errores</title>
<para>
Todos los métodos SAMConnection que proporcionan acceso a operaciones de mensajería
devuelven &false; en caso de error en el procesado de la petición.
Adicionalmente, el objeto SAMConnection tiene dos propiedades: "errno"
y "error", que proporcionan respectivamente el código y literal del
último error ocurrido en la conexión.
</para>
<para>
<example>
<title>Control de errores de un método que no devuelve resultado</title>
<programlisting role="php">
<![CDATA[
<?php
if (!$conn->commit()) {
// El commit falló!
echo "Commit fallido ($conn->errno) $conn->error";
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Control de errores de un método que devuelve resultado</title>
<programlisting role="php">
<![CDATA[
<?php
$correlid = $conn->send('queue://send/test', $msg);
if (!$correlid) {
// El Send falló!
echo "Send fallido ($conn->errno) $conn->error";
} else {
/* ... */
}
?>
]]>
</programlisting>
</example>
</para>
</section> <!-- xml:id=sam.errors -->
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->