En una entrada anterior veíamos como crear proxys en el WSO2 ESB para escribir y leer mensajes de colas creadas en IBM MQ, y habíamos quedado en que mostraríamos como implementar un escenario request/response:
Los pasos identificados en la imagen anterior son los siguientes:
Veamos la API como queda:
De esta manera queda definido cómo se puede establecer una comunicación entre distintos componentes de la suite de wso2, en un escenario request/response, con colas involucradas las cuales han sido creadas en el IBM MQ.
Esperamos les sea de utilidad.
Los pasos identificados en la imagen anterior son los siguientes:
- Al WSO2 ESB llega un mensaje a través de un API.
- La API envía el mensaje a una cola en el IBM MQ. La cola es SMSStore.
- El proxy que está escuchando en la cola del punto 2, recupera el mensaje en su secuencia de entrada.
- El mensaje es enviado al servicio backend, desplegado en el WSO2 AS.
- La respuesta generada por el backend es enviada al proxy.
- La respuesta del punto 5 es puesta en una cola de respuesta, indicada en la configuración del endpoint del punto 2.
- La API recupera el mensaje puesto en la cola de respuesta. La cola de respuesta es SMSReceiveNotificationStore.
- El mensaje es enviado de vuelta al cliente.
Veamos la API como queda:
<?xml version="1.0" encoding="UTF-8"?>
<api xmlns="http://ws.apache.org/ns/synapse"
name="CustomersAPI"
context="/Customers">
<resource methods="POST GET" uri-template="/getCustomer*">
<inSequence>
<property action="remove" name="TRANSPORT_HEADERS" scope="axis2"/>
<send>
<endpoint>
<address uri="jms:/SMSStore?transport.jms.ConnectionFactoryJNDIName=myQueueConnectionFactory&java.naming.factory.initial=com.sun.jndi.fscontext.RefFSContextFactory&java.naming.provider.url=file:/C:/JNDI-Directory&transport.jms.DestinationType=queue&transport.jms.ReplyDestination=SMSReceiveNotificationStore&transport.jms.ConnectionFactoryType=queue&transport.jms.ContentTypeProperty=contentType"/>
</endpoint>
</send>
</inSequence>
<outSequence>
<property action="remove" name="TRANSPORT_HEADERS" scope="axis2"/>
<send/>
</outSequence>
</resource>
</api>
El proxy que es invocado indirectamente(escucha en la cola donde se pone el mensaje) por la API es el siguiente:<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="CustomerProxy"
transports="jms"
statistics="disable"
trace="disable"
startOnLoad="true">
<target faultSequence="fault">
<inSequence>
<log level="full"/>
<send>
<endpoint>
<address uri="http://localhost:9765/jaxrs_basic/services/customers/customerservice/customers">
<suspendOnFailure>
<errorCodes>-1</errorCodes>
<progressionFactor>1.0</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<errorCodes>-1</errorCodes>
</markForSuspension>
</address>
</endpoint>
</send>
</inSequence>
<outSequence>
<log level="full"/>
<property name="Content-Length" scope="transport" action="remove"/>
<property name="Content-Type" scope="transport" action="remove"/>
<send/>
</outSequence>
</target>
<parameter name="transport.jms.ContentType">
<rules>
<jmsProperty>contentType</jmsProperty>
<default>text/xml</default>
</rules>
</parameter>
<parameter name="transport.jms.ConnectionFactory">myQueueConnectionFactory</parameter>
<parameter name="transport.jms.DestinationType">queue</parameter>
<parameter name="transport.jms.Destination">SMSStore</parameter>
<description/>
</proxy>
La invocación al API se realiza usando el plugin de firefox RESTClient:De esta manera queda definido cómo se puede establecer una comunicación entre distintos componentes de la suite de wso2, en un escenario request/response, con colas involucradas las cuales han sido creadas en el IBM MQ.
Esperamos les sea de utilidad.


Muy buen POST pero no me quedan claro dos cosas:
ResponderEliminar1. Como el proxy envia el mensaje del backend hacia la cola SMSReceiveNotificationStore, sera que falto algo o hay algo que se realiza automatico y no me doy cuenta.
2. En caso de que fueran varios clientes los que consuman ese api, a cada uno de ellos les llega el mensaje de response por separado o sea el mensaje de respuesta que era para el o todos los mensajes que estan en la cola
Para el punto 1, prueba y me dices :-D
ResponderEliminarPara el punto 2 tendrías que jugar con el tema de los ID de correlación, en caso que el broker no lo maneje automaticamente.