Pregunta

Actualmente estoy cambiando con una aplicación que tiene un programa de instalación de la coincidencia de los siguientes chat analogía:

  • un chat es un objeto que se mantiene en la memoria y contiene una lista de chat mensajes
  • un chat es representado en varias ventanas del navegador y actualizaciones tiró con a4j:push

La programación de configuración se parece a esto:una instancia de un objeto chat con los mensajes es compartida entre la PÁGINA, ámbito de la costura de la componente en las diferentes sesiones.Ahora, cuando cualquier sesión de puestos de un nuevo mensaje, es decir,modifica el objeto chat, todos de la costura de los componentes debe ser notificado de que el nuevo mensaje para que el nuevo estado puede ser transmitida a la interfaz de usuario en todos los clientes.

No puedo pensar en tres maneras de lograr esto:

  1. La costura de los eventos con el ID de chat como un parámetro y, a continuación, cada componente comprueba el ID y actualiza o ignora el mensaje
  2. Colas JMS o un tema JMS donde cada componente listenes con un filtro para que sólo es chat
  3. un puro de Java mecanismo detector en el chat objeto, es decir,cada costura componente de los registros y la notificación es pura y directa de java

Por el bien del argumento asume que el número de chat es grande (decenas de miles) y el número de usuarios de chat es pequeña (digamos 2-10).

¿Cómo cada escala de rendimiento sabio?¿Tiene alguna sugerencia de cómo hacer esto con la Costura y la realización de bien?

Como yo lo veo, (1) se integren y limpio, pero con el tiempo se había notificar a decenas de miles de componentes, donde sólo unos pocos realmente lo necesitan.Así que probablemente no escala.

(2) se integren y sólo dependen del rendimiento del proveedor JMS (que pueden ser intercambiados) y también el trabajo en un entorno agrupado, sin modificaciones.No estoy seguro sobre el rendimiento de JMS aquí, es decir,son un par de cientos de mensajes por segundo y miles de oyentes con diferentes filtros de mucho o no?

(3) sería rápido, porque sólo los componentes necesarios serían notificados y la notificación es pura y directa de java.Sin embargo, la simultaneidad de acceso / problemas pueden surgir debido a algo cruz sesión / componente / hilo está hecho.

Para (1) y (3) una solución que es compatible con la agrupación tendría que ser añadido manualmente si es necesario en algún momento.

¿Fue útil?

Solución

Me gustaría recomendar 2). También recomendaría el corte JMS fuera de la ecuación - a pesar de que le permitirá cambiar de proveedor de mensajería que también hará que impiden trabajar con las características más avanzadas de su sistema de mensajería. Si está utilizando una base de datos Oracle AQ haría una elección sensata (soporta JMS por cierto.). De lo contrario me gustaría recomendar el uso AMQP que debería estar disponible a través de JBoss Messaging o una solución de terceros como RabbitMQ .

Dado que usted tiene claramente un problema de mensajería debe optar por el uso de una solución de mensajería.

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