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.