Saltar al contenido

¿Cuál es la diferencia entre SEDA, VM y directo en Apache Camel?

Solución:

Existen al menos cuatro mecanismos diferentes mediante los cuales una ruta Camel puede pasar datos directamente a otra. Por “directamente” me refiero sin utilizar una red o alguna forma de almacenamiento intermedio (archivo, base de datos). Estos mecanismos se pueden agrupar según si pueden pasar datos entre instancias de CamelContext o no, y si son síncronos o asincrónicos.

  • directo – CamelContext único, sincrónico (productor de bloques)
  • SEDA – CamelContext único, asincrónico (no bloquea al productor)
  • VM – CamelContext múltiple, asíncrono (no bloquea al productor)
  • direct-VM: múltiples CamelContext, síncronos (productor de bloques)

Los mecanismos de VM directa y directa son síncronos, en el sentido de que el punto final productor se bloquea hasta que el punto final consumidor, y todo el resto de su lógica de enrutamiento, está completo. Los mecanismos SEDA y VM utilizan un grupo de subprocesos en el consumidor, de modo que cada solicitud realizada por el productor se asigna a uno de los subprocesos del grupo. Esto permite que el punto final del consumidor y su lógica de enrutamiento asociada actúen independientemente del productor.

Ambos puntos finales de VM son necesarios en situaciones en las que la comunicación se produce entre diferentes contextos de Camel. En muchos casos, es posible combinar rutas en el mismo CamelContext. Sin embargo, a veces puede ser desaconsejable, por razones de modularidad, o imposible, porque algún marco de aplicación lo hace. Por ejemplo, podría implementar alguna lógica de enrutamiento Camel en una biblioteca (o componente) con la intención de que la biblioteca sea utilizada por otro código. Para estar completa, esta biblioteca probablemente definirá un CamelContext autónomo con varias rutas. Si quiero invocar la lógica de Camel en la biblioteca, necesitaré usar VM o direct-VM, porque los extremos directos y SEDA no contienen la lógica necesaria para enrutar entre contextos de Camel.

La diferencia entre direct: y seda: componentes es que el primero es sincrónico y el segundo es asincrónico, con una cola.

La diferencia práctica es que para enviar mensajes síncronos, debe esperar a que se complete la ruta, mientras que con los mensajes asíncronos, es “disparar y olvidar”: los coloca en una cola y supone que un consumidor los procesará. También puede tener varios consumidores (paralelización).

El último ejemplo, vm: también es asincrónico, pero también puede llamar a rutas en diferentes contextos camel dentro de la misma JVM. Imagine que la aplicación 1 tiene un contexto de camello y la aplicación 2 tiene un contexto de camello, de esta manera pueden comunicarse entre sí.

editar:

En relación con “qué usar cuando”:

  • usar direct: para llamar normalmente entre puntos finales en un contexto de camello
  • usar seda: cuando necesite paralelización o colas, pero no quiera usar jms:
  • usar vm: al llamar entre aplicaciones.

Por supuesto, hay muchos otros casos de uso, pero esos son los comunes (subjetivos a mi propia experiencia)

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *