java - google - ¿Cuándo usar un autobús de eventos?
guava maven (1)
Estoy diseñando el backend para una nueva aplicación web Java y estoy tratando de decidir si usar o no un Bus de Eventos; específicamente el EventBus
Guava .
La mayoría de las solicitudes del lado del servidor serán sincrónicas: es decir, el usuario está solicitando datos y necesita una respuesta en unos pocos segundos. Sin embargo, también hay un buen número de solicitudes que pueden ser asíncronas y que son "disparar y olvidar" en el lado del cliente. Mientras se procesen, al cliente le puede importar menos si se tarda 2 segundos en procesarse o 2 horas.
Para estas solicitudes asíncronas, planeo que el servlet que escucha en la URL asignada publique las solicitudes en una cola. Luego, un consumidor retirará de la cola cada solicitud y la enrutará al controlador apropiado. Aquí es donde el EventBus
puede o no entrar en juego. La lógica de negocios para enrutar la solicitud al controlador correcto es bastante compleja. Normalmente una ruta en camello sería la solución perfecta. En mi caso de uso, me pregunto si puedo conectar un grupo de "procesadores" (controladores de eventos) al mismo bus de eventos, y luego hacer que cada uno dispare y reciba eventos entre sí hasta que se obtenga un resultado final. producido
Me gustaría decir que ya exploré el uso de Apache Camel y que creo que Camel es la herramienta adecuada para el trabajo aquí. Lamentablemente, por razones fuera del alcance de esta pregunta, no lo voy a utilizar. Así que empecé a conjurar soluciones parecidas a las de un camello, que es como llegué al EventBus
de Guava. Pero puede que no sea un reemplazo adecuado.
Supongo que estoy buscando la clasificación de problemas que resuelve el patrón del Event Bus
, y luego necesito determinar si coincide con mi caso de uso aquí.
Aquí está la declaración del problema que EventBus
resuelve en pocas palabras:
"Quiero una manera fácil y centralizada de notificar el código que está interesado en tipos específicos de eventos cuando esos eventos ocurren sin ningún acoplamiento directo entre el código que publica un evento y el código que lo recibe".
Cuando dice "la lógica de negocios para enrutar la solicitud al manejador correcto es bastante compleja", sospecho que EventBus
puede no ser lo que está buscando, ya que solo se basa en la clase de objeto Java (aunque puede hacer algunos supuestos). cosas con la implementación de interfaces en sus clases de eventos y que los suscriptores se suscriban a interfaces específicas).