¿Para qué se utiliza ActiveMQ? ¿Podemos aplicar el concepto de mensajería utilizando una base de datos?


Respuestas:


178

Se utiliza para comunicarse de manera confiable entre dos procesos distribuidos.

Sí, podría almacenar mensajes en una base de datos para comunicarse entre dos procesos, pero, tan pronto como se reciba DELETEel mensaje, tendrá que ver el mensaje, eso significa una fila INSERTy DELETEpara cada mensaje.
Cuando intentas escalar eso comunicando miles de mensajes por segundo, las bases de datos tienden a caer .

Los middleware orientados a mensajes [MOM], como ActiveMQpor otro lado, están diseñados para manejar esos casos de uso.
Asumen que los mensajes en un sistema saludable se eliminarán muy rápidamente y pueden hacer optimizaciones para evitar la sobrecarga .

También puede enviar mensajes a los consumidores en lugar de que un consumidor tenga que sondear el nuevo mensaje mediante una consulta SQL.
Esto reduce aún más la latencia involucrada en el procesamiento de nuevos mensajes que se envían al sistema.


¡Buena explicación! ¿Los dos procesos distribuidos tienen que ser del mismo proceso? Me refiero a dos instancias de la misma aplicación.
Maverick

No, las aplicaciones arbitrarias pueden comunicarse entre sí a través de ActiveMQ. Por ejemplo, las aplicaciones A y B podrían crear qeues AB y BA (léase: mensajes para A de B y viceversa) y enviarse mensajes entre sí a la cola correspondiente.
Alex


67

ActiveMQ, o en general, todas las implementaciones de Middleware orientado a mensajes (MOM) están diseñadas con el propósito de enviar mensajes entre dos aplicaciones o dos componentes dentro de una aplicación.

Esencialmente, MOM y las bases de datos comparten una base común en el sentido de que brindan almacenamiento de datos transaccionales y persistentes para leer y escribir.
La gran diferencia es el patrón de uso: donde las bases de datos son muy genéricas y optimizadas para búsquedas complejas en múltiples tablas, MOM está optimizado para leer mensajes, uno a la vez, en un formato FIFO como [Cola].

JMS, que es una API que implementa ActiveMQ, es una piedra angular importante en las aplicaciones Java Enterprise. Esto hace que los mensajes compartan un formato y una semántica bastante comunes, lo que facilita la integración entre diferentes aplicaciones.

Por supuesto, hay una gran cantidad de características más detalladas que se encuentran sólo en ActiveMQ, protocolos de alambre como OpenWire, STOMPy MQTT, JMS, EIPjunto con Apache Camel, patrones de mensajes como "petición / respuesta" y "publicación / suscripción", JMS Bridging, la agrupación (" red de corredores "), que permiten escalado y distribuciones, etc.
Debería leer un poco sobre esos temas si está interesado ya que son bastante extensos.


25

ActiveMQtiene un excelente soporte de programación , lo que significa que puede programar el envío de su mensaje para que se entregue en un momento particular .

Hemos utilizado esta función para enviar recordatorios de medicamentos a los pacientes que cargan los detalles de sus medicamentos en un escenario de atención médica.


3
Eso es muy bonito. Hemos utilizado la biblioteca de programación Quartz para recordatorios similares.
Siddhartha

Hemos utilizado la base Scheduled Jobsde datos de Oracle para los mismos fines.
ahmednabil88

15

Con RDBMS, cuando procesa una fila de datos, normalmente actualiza una marca que indica que la fila se ha procesado para que el procesamiento no se repita.

Sin embargo, con Message Queue, solo tiene que reconocer un mensaje y el próximo consumidor procesará el siguiente.

La diferencia es que la UPDATEdeclaración en un RDBMS es una operación realmente lenta en comparación con la acknowledgede activmeq.


8

me gustaría enfatizar lo siguiente:

Desacoplado : los sistemas pueden comunicarse sin estar conectados. La cola se encuentra entre los sistemas, una falla del sistema nunca afectará al otro ya que la comunicación se realiza a través de la cola. Los sistemas continúan funcionando cuando están activos.

Soporte de recuperación : los mensajes en las colas persistieron. Los mensajes se pueden restaurar más tarde si la cola falla.

Comunicación confiable : considere un sistema que procese las solicitudes de los clientes. En casos normales, el sistema recibe 100 solicitudes por minuto. Este sistema no es confiable cuando el número de solicitudes supera el promedio. En tal caso, Queue puede administrar solicitudes y puede enviar mensajes periódicamente según el rendimiento del sistema sin interrumpirlo.

Asíncrono : la comunicación entre el cliente y el servidor no se bloquea. Una vez que el cliente envía la solicitud al servidor, puede realizar otras operaciones sin esperar respuesta. Cuando la respuesta recibida, el cliente puede manejarla en cualquier momento.


7

De Wikipedia

Apache ActiveMQ es un agente de mensajes de código abierto escrito en Java junto con un cliente completo de Java Message Service (JMS). Proporciona "Funciones empresariales" que en este caso significa fomentar la comunicación desde más de un cliente o servidor.

Respecto a sus consultas:

¿Por qué no usarías una base de datos?

Debe usar la base de datos para datos persistentes y no para datos temporales. Suponga que tiene que enviar un mensaje del remitente al receptor. Al recibir el mensaje, Receiver ejecuta una operación (recibir, procesar y olvidar). Después de procesar ese mensaje, no necesita ese mensaje en absoluto. En este caso, almacenar el mensaje en una base de datos persistente no es una solución adecuada.

Estoy totalmente de acuerdo con la respuesta de @Hiram Chirino con respecto a la inserción y eliminación de mensajes en la base de datos si usa la base de datos en lugar del sistema de mensajería.

Beneficios de esto artículo y este artículo

  1. Integración empresarial : permitir que las aplicaciones creadas con diferentes idiomas y en diferentes sistemas operativos se integren entre sí
  2. Transparencia de ubicación : las aplicaciones cliente no necesitan saber dónde están ubicadas las aplicaciones de servicio
  3. Comunicación confiable : los productores / consumidores de mensajes no tienen que estar disponibles al mismo tiempo
  4. Escalada : puede escalar horizontalmente agregando más servicios
  5. Comunicación asíncrona : un cliente puede enviar un mensaje y continuar con otro procesamiento en lugar de bloquearlo hasta que el servicio haya enviado una respuesta;
  6. Acoplamiento reducido : las suposiciones hechas por los clientes y los servicios se reducen en gran medida como resultado de los 5 beneficios anteriores. Un servicio puede cambiar detalles sobre sí mismo, incluida su ubicación, protocolo y disponibilidad, sin afectar ni interrumpir al cliente.

¿Debe haber una característica que ActiveMQ tenga que las bases de datos no?

Hay muchos. Eche un vistazo a la página de documentación para obtener más detalles. Mira esto los casos de uso .

Eche un vistazo a esta presentación para comprender los aspectos internos de ActiveMQ.


2

Suponga que tiene una aplicación que se utiliza en varias ubicaciones al mismo tiempo. También suponga que su aplicación tiene que manejar miles de solicitudes por minuto o algo así para que las operaciones normales de la base de datos no puedan manejar dichas operaciones, Activemq actúa como el procesamiento de mensajes, lleva todos los mensajes a la cola, por lo que incluso si una de sus aplicaciones falla en una ubicación la otra ubicación no se verá afectada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.