Diferencia entre revisiones de «Spring Integration»

De Dos Ideas.
Saltar a: navegación, buscar
(Ver también)
Línea 19: Línea 19:
 
</code>
 
</code>
  
====Consumir un mensaje de una cola y mostrarlo por consola. (stdout-channel-adapter)====
+
====stdout-channel-adapter====
 +
Podemos consumir un mensaje de una cola y mostrarlo por consola. Para esto es necesario configurar un '''stdout-channel-adapter''', el cual se encargará de procesar los mensajes. Luego, se crea un '''bridge''' que asocia un canal de entrada con este adaptador.
 +
 
 
<code xml>
 
<code xml>
 
<stream:stdout-channel-adapter id="stdout" append-newline="true"/>
 
<stream:stdout-channel-adapter id="stdout" append-newline="true"/>
Línea 25: Línea 27:
 
</code>
 
</code>
  
====Consumir un mensaje de una cola y enviarlo a una lista fija de colas destino. (recipient-list-router).====
+
====recipient-list-router====
 +
Podemos consumir un mensaje de una cola y enviarlo a una lista fija de canales de destino. En este ejemplo creamos un '''recipient-list-router''', el cual consume mensajes de un canal de entrada y los envia a dos canales de destino distintos. Entonces, cada mensaje que llegue al canal de entrada será derivado a dos canales de destino.  
  
 
<code xml>
 
<code xml>
Línea 34: Línea 37:
 
</code>
 
</code>
  
====Consumir un mensaje de una cola y enviarlo a una cola especifica dependiendo del valor de un atributo del header del mensaje. (header-value-router).====
+
====header-value-router====
 +
Podemos consumir un mensaje de una cola y enviarlo a una cola especifica dependiendo del valor de un atributo del header del mensaje. De esta manera, configuramos un '''header-value-router''', el cual contiene el canal de entrada y el nombre del atributo del encabezado que se comprobará. Luego, se realiza el mapeo entre los posibles valores de este encabezado y algún canal de destino. Si llega un mensaje que coincida este mapeo, será enviado a ese canal de destino.
  
 
<code xml>
 
<code xml>
Línea 44: Línea 48:
 
</code>
 
</code>
  
====Consumir un mensaje de una cola y enviarlo a una lista de colas de salida utilizando un pojo para determinar a que colas enviarlo.(router).====
+
====router====
 +
Podemos consumir un mensaje de una cola y enviarlo a una lista de colas de salida utilizando un pojo para determinar a que colas enviarlo. En este ejemplo, creamos un '''router''' que será implementado por la clase "MultiDestino". Esta clase devuelve una lista de nombres de canales hacia donde se derivará el mensaje.
  
 
<code xml>
 
<code xml>

Revisión del 19:23 5 nov 2009

Spring Framework proporciona integración para JMS, remoting, scheduling, email y JMX. Spring Integration intenta crear una capa de abstracción para los patrones de integración empresarial, con la filosofía de separar los componentes de negocio del sistema de mensajeria utilizado.

Algunos ejemplos de como utilizar Spring Integration con mensajería.

Definición de canales de entrada y salida

<integration:channel id="QueueChanneIn"/>

<jms:message-driven-channel-adapter connection-factory="PruebaQueueConnectionFactory" destination-name="jms/Queue-in" destination-resolver="jmsDestinationResolver" channel="QueueChanneIn" acknowledge="auto" concurrent-consumers="1"/>

<integration:channel id="QueueChanneOut1"/> <jms:outbound-channel-adapter jms-template="jmsQueueTemplateOut1" channel="QueueChanneOut1"/>

<integration:channel id="QueueChanneOut2"/> <jms:outbound-channel-adapter jms-template="jmsQueueTemplateOut2" channel="QueueChanneOut2"/>

stdout-channel-adapter

Podemos consumir un mensaje de una cola y mostrarlo por consola. Para esto es necesario configurar un stdout-channel-adapter, el cual se encargará de procesar los mensajes. Luego, se crea un bridge que asocia un canal de entrada con este adaptador.

<stream:stdout-channel-adapter id="stdout" append-newline="true"/> <integration:bridge id="echo" input-channel="QueueChanneIn" output-channel="stdout"/>

recipient-list-router

Podemos consumir un mensaje de una cola y enviarlo a una lista fija de canales de destino. En este ejemplo creamos un recipient-list-router, el cual consume mensajes de un canal de entrada y los envia a dos canales de destino distintos. Entonces, cada mensaje que llegue al canal de entrada será derivado a dos canales de destino.

<integration:recipient-list-router input-channel="QueueChanneIn" apply-sequence="true">

           <integration:recipient channel="QueueChanneOut1"/>
           <integration:recipient channel="QueueChanneOut2"/>

</integration:recipient-list-router>

header-value-router

Podemos consumir un mensaje de una cola y enviarlo a una cola especifica dependiendo del valor de un atributo del header del mensaje. De esta manera, configuramos un header-value-router, el cual contiene el canal de entrada y el nombre del atributo del encabezado que se comprobará. Luego, se realiza el mapeo entre los posibles valores de este encabezado y algún canal de destino. Si llega un mensaje que coincida este mapeo, será enviado a ese canal de destino.

<integration:header-value-router input-channel="QueueChanneIn" header-name="springintegration_jms_type">

       <integration:mapping value="Out1" channel="QueueChanneOut1"/>
       <integration:mapping value="Out2" channel="QueueChanneOut2"/>

</integration:header-value-router>

router

Podemos consumir un mensaje de una cola y enviarlo a una lista de colas de salida utilizando un pojo para determinar a que colas enviarlo. En este ejemplo, creamos un router que será implementado por la clase "MultiDestino". Esta clase devuelve una lista de nombres de canales hacia donde se derivará el mensaje.

<integration:router input-channel="QueueChanneIn" ref="multiDestino"/> <bean id="multiDestino" class="com.dosideas.springintegration.MultiDestino"/>

public class MultiDestino {

   @Router
   public List<String> resolverChannel(GenericMessage message) throws JMSException {
       List<String> list = new ArrayList<String>();
       if(message.getHeaders().get("springintegration_jms_type").equals("Out1")) {
           System.out.println(message.getHeaders().get("springintegration_jms_type"));
           list.add("QueueChanneOut1");
           
       }
       else if(message.getHeaders().get("springintegration_jms_type").equals("Out2")) {
           System.out.println(message.getHeaders().get("springintegration_jms_type"));
           list.add("QueueChanneOut2");
       }
       else if(message.getHeaders().get("springintegration_jms_type").equals("Multi")) {
           System.out.println(message.getHeaders().get("springintegration_jms_type"));
           list.add("QueueChanneOut1");
           list.add("QueueChanneOut2");
       }
       return list;
   }

}


Ver también