Pregunta

Estoy buscando un marco de mensajería ligero en Java. Mi tarea es procesar los eventos a la manera de una SEDA: sé que algunas etapas del procesamiento podrían completarse rápidamente y otras no, y me gustaría disociar estas etapas del procesamiento.

Digamos que tengo los componentes A y B y el motor de procesamiento (sea este contenedor o lo que sea) invoca el componente A, que a su vez invoca el componente B. No me importa si el tiempo de ejecución del componente B será 2, pero sí cuidado si el tiempo de ejecución del componente A es inferior a 50 ms, por ejemplo. Por lo tanto, parece más razonable que el componente A envíe un mensaje a B, que B procesará en el momento deseado.

Soy consciente de las diferentes implementaciones de JMS y Apache ActiveMQ: son demasiado pesadas para esto. No busqué ningún mensaje liviano (con características realmente básicas como la serialización de mensajes y el enrutamiento más simple)

¿Tienes algo que recomendar en este problema?

¿Fue útil?

Solución

¿Necesita algún tipo de persistencia (por ejemplo, si su JVM muere entre el procesamiento de miles de mensajes) y necesita mensajes para pasar a otras JVM?

Si todo está en una única JVM y no necesita preocuparse por las transacciones, la recuperación o la pérdida de mensajes si una JVM muere, entonces, como dice Chris más arriba, los Ejecutores están bien.

ActiveMQ es bastante ligero; puede usarlo en una sola JVM solo sin persistencia si lo desea; luego puede habilitar las transacciones / persistencia / recuperación / control remoto (trabajar con múltiples JVM) cuando lo necesite. Pero si no necesita ninguna de estas cosas, entonces es excesivo, solo use Ejecutores.

Incidentalmente, otra opción si no está seguro de qué pasos pueden necesitar persistencia / confiabilidad o equilibrio de carga para varias JVM sería oculta completamente el uso de middleware para que pueda alternar entre las colas SEDA de memoria con los ejecutores a JMS / ActiveMQ cuando sea necesario.

por ejemplo Es posible que algunos pasos deban ser confiables y amp; recuperable (por lo que necesita algún tipo de persistencia) y otras veces no.

Otros consejos

¿Realmente ligero? Ejecutores . :-) Así que configuras un ejecutor (B, en tu descripción), y A simplemente envía las tareas al ejecutor.

Creo que Apache Camel cubre todas tus necesidades. Funciona dentro de la JVM y es compatible con el estilo SEDA ( http://camel.apache.org/seda.html ) y simpe de enrutamiento. Se puede usar solo, o con Spring, con un proveedor de JMS u otros adaptadores.

Lo siento por haber resucitado un hilo antiguo, pero tal vez ayude a alguien más a leerlo ... Creo que FFMQ es un buen candidato para un marco de mensajería ligero.

ACTUALIZACIÓN: sin embargo, no estoy seguro de si es compatible con retrasos de entrega (el problema de la cola de mensajes no entregados). Me parece útil incluso para los proveedores de peso ligero. Pero supongo que podría ser posible con una combinación de consulta de MessageSelector y propiedades de mensaje.

Para ayudar a alguien más lea este hilo:
Uno de los marcos de mensajería más ligeros es Mbasseder . MBassador es una implementación de bus de mensajes (eventos) muy ligera que sigue el patrón de suscripción de publicación. Está diseñado para ser fácil de usar y pretende ser rico en funciones y extensible al tiempo que conserva la eficiencia y el rendimiento de los recursos.
 El núcleo del alto rendimiento de MBassador es una estructura de datos especializada que minimiza la contención del bloqueo, de modo que la degradación del rendimiento del acceso concurrente es mínima.  Características: definición de escucha declarativa mediante anotaciones, sincronización y / o entrega de eventos asíncronos, referencias débiles, filtrado de mensajes

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top