Estoy creando una aplicación Java que requiere una comunicación maestro-esclavo entre JVM, que posiblemente resida en la misma máquina física. Habrá un servidor "maestro" ejecutándose dentro de un servidor de aplicaciones Java EE (es decir, JBoss) que tendrá clientes "esclavos" conectados a él y se registrará dinámicamente para la comunicación (es decir, el maestro no conocerá las direcciones IP/puertos del esclavos entonces no se pueden configurar de antemano). El servidor maestro actúa como un controlador que funcionará para los esclavos y los esclavos responderán periódicamente con notificaciones, por lo que habría una comunicación bidireccional.¿Qué es un buen mecanismo de comunicación Maestro-Esclavo basado en Java?
Originalmente estaba pensando en sistemas basados en RPC, donde cada lado sería un servidor, pero podría ser complicado, así que preferiría un mecanismo donde haya un socket abierto y que hablen de un lado a otro.
Estoy buscando un mecanismo de comunicación de baja latencia donde los mensajes sean en su mayoría tipos primitivos, por lo que no es necesaria una seria serialización. Esto es lo que he visto:
- RMI
- JMS: Built-in de Java, los clientes "esclavos" se conectarían a la ConnectionFactory existente en el servidor de aplicaciones.
- JAX-WS/RS: Tanto el maestro como el esclavo serían servidores que expondrían una interfaz RPC para la comunicación bidireccional.
- JGroups/Hazelcast: utilice estructuras de datos distribuidos compartidos para facilitar la comunicación.
- Memcached/MongoDB: Úselos como "colas" para facilitar la comunicación, aunque los clientes tendrían que sondear para que haya alguna latencia.
- Ahorro: Esto parece mantener una conexión persistente, pero no sabe cómo integrar/incrustar un servidor de Ahorro en JBoss
- WebSocket/Raw Socket: Esto funcionaría, pero requiere código mucho más a medida de lo que había me gusta.
¿Existe alguna tecnología que me falte?
Editar: también han visto:
- JMX: Haga que el cliente conectarse al servidor JMX JBoss y recibir notificaciones de JMX para comunicaciones bidireccionales.
Imagino que necesitará una capa de cuero o PVC alrededor de ambas aplicaciones, y un protcol de SafeWord. – FrustratedWithFormsDesigner