En un diseño típico de un nivel medio y un back-end para una aplicación móvil, ¿necesita un servicio de mensajería como ActiveMQ, Qpid o algo por el estilo?

Creo que esto no le brindará ninguna ventaja en el dibujo que muestra, porque no hay ninguna ventaja en el envío directo de mensajes si sus clientes solo están sondeando nuevos datos; sin embargo, si sus clientes estaban usando algo como sondeo HTTP largo, donde el el servidor les envía nuevos mensajes (y debería ser así, a nadie le gusta actualizar la página / aplicación para ver si tienen notificaciones nuevas), entonces podría obtener algo de ella.

Cuando un usuario envía algo a otra persona, puede poner en cola un mensaje de que se ha producido alguna acción para que el hilo / servidor de destino envíe inmediatamente una notificación a la conexión del cliente receptor. No sé si hay una manera de suscribirse a eventos que suceden en una base de datos NoSQL, pero supongo que no, después de todo es solo una base de datos, no su bucle de eventos distribuido personal (no tengo mucha experiencia con ellos, así que esto podría no ser realmente cierto). En este caso, realizará solicitudes a la base de datos solo cuando el cliente realmente solicite algunos datos, por ejemplo, al tomar medidas en la notificación; gran parte de la “acción en vivo” ocurrirá en ZeroMQ / ActiveMQ. Supongo que incluso podría hacer que la mayor parte de la aplicación funcione solo pasando mensajes, y usar la base de datos solo por persistencia (por ejemplo, cuando el cliente receptor no está conectado y para almacenar historiales de conversación en caso de problemas de conexión o solo por conveniencia). En este caso, la base de datos será solo otro punto final en su sistema de colas de mensajes.

No, agregar una cola de mensajes entre la aplicación móvil y el servidor web Java no funcionará porque el dispositivo móvil realizará llamadas REST a través de HTTP. Los servicios de colas de mensajes no usan HTTP y usan otros protocolos como AMQP.

Una cola de mensajes sería útil si hay varios componentes que manejan el nivel medio. Por ejemplo, con el servidor web Java comunicándose con la aplicación móvil pero sin conectarse directamente al almacén de datos, con otros componentes que realizan ese trabajo y otros procesos.