¿Cuál es la diferencia entre Java RMI y JMS?


Al diseñar una aplicación distribuida en Java parece haber algunas tecnologías que abordan el mismo tipo de problema. He leído brevemente sobre Java Remote Method Invocation y Java Message Service , pero es difícil ver realmente la diferencia. Java RMI parece estar más estrechamente acoplado que JMS porque JMS utiliza comunicación asíncrona, pero por lo demás no veo grandes diferencias.

  • ¿Cuál es la diferencia entre ellos?
  • Es uno de ¿son más nuevos que el otro?
  • ¿Cuál es más común/popular en las empresas?
  • ¿Qué ventajas tienen unos sobre otros?
  • ¿Cuándo se prefiere uno sobre el otro?
  • ¿Difieren mucho en lo difícil que son de implementar?

También creo que Los Servicios Web y CORBA abordan el mismo problema.

Author: Jonas, 2010-04-05

4 answers

Realmente no se pueden comparar los dos, sus manzanas y naranjas.

RMI es una forma de Llamada a Procedimiento Remoto (RPC). Es una API ligera y específica de Java que espera que el llamante y el receptor estén disponibles en el momento de la comunicación.

JMS es una API de mensajería confiable. Existen proveedores de JMS para varios sistemas de mensajería. Los mensajes se pueden pasar incluso si una de las partes no está disponible si el proveedor lo implementa. Los dos con los que estoy familiarizado son TIBCO e IBM MQ.

RMI no se ocupa de la entrega garantizada o respuestas asíncronas, JMS puede, dependiendo del proveedor.

JMS permite el acoplamiento suelto en el sentido de disponibilidad. Los "Servicios Web" permiten el acoplamiento suelto en el sentido de protocolo y datos, pero no especifica mucho en el modo de mensajería confiable, aunque algunas implementaciones incluyen esto (Windows Communication Foundation) y algunas no.

EDITADO: Revisado por comentarios. Cuando escribí esta respuesta en 2010 mi la experiencia fue en realidad con un solo proveedor de JMS y en realidad no sabía que no había un proveedor de JMS predeterminado.

 30
Author: codenheim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-18 20:01:28

Ya conoce las llamadas a métodos. ¿Qué pasa si el objeto en el que desea invocar el método está en un equipo diferente? Utiliza RMI para enviar la llamada de un equipo (cliente) al otro (servidor). El cliente esperará (o "bloqueará") hasta que el resultado regrese del servidor. Esto se llama operación síncrona.

JMS es diferente: permite que una computadora envíe un mensaje a otra, como un correo electrónico. El primero no tiene que esperar una respuesta: puede mantener haciendo el trabajo que quiera. Puede que ni siquiera haya una respuesta. Los dos sistemas informáticos no necesariamente funcionan exactamente en el paso, por lo que esto se llama asíncrono.

Otra forma de pensar sobre la diferencia: RMI es como hacer una llamada telefónica, y JMS es como enviar un mensaje de texto.

RMI es un poco más antiguo que JMS, pero eso no es realmente relevante. Los dos conceptos son mucho más antiguos que java.

No Hay mucha diferencia en la complejidad. Creo que debería intentar hacer un tutorial sobre cada uno. RMI y JMS

Si está comenzando un proyecto desde cero, y no está seguro de cuál usar, entonces probablemente el problema síncrono/asíncrono es el mejor factor de decisión. Si está trabajando en un sistema existente, probablemente sea mejor no introducir demasiadas tecnologías nuevas. Así que si ya están usando uno, entonces sugeriría que probablemente sea mejor quedarse con ese.

 40
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-05 01:12:43

Remote Method Invocation (RMI) : 1.Interfaz RPC nativa de Java 2.Los objetos remotos se pueden ejecutar con una semántica similar a la de los objetos locales 3.La implementación predeterminada utiliza un protocolo de comunicación binario propietario, pero RMI se puede implementar sobre SOAP

Sistema de mensajería Java (JMS) 1.Interfaz y especificación de Java para Middleware Orientado a Mensajes 2.Los paquetes de datos se pueden enviar a colas de mensajes y temas donde se operarán de forma asíncrona. El las colas o los temas no necesitan ser remotos 3.El servidor JMS podría usar RMI, SOAP, etc.

 8
Author: giri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-05 03:49:19
  • RMI se utilizan para comunicar aplicaciones estrechamente acopladas entre sí en lugar de JMS utilizados para acoplar libremente.
  • RMI utilizado para Asíncrono (chat en tiempo real) pero JMS utilizado para ambos Sincrónicamente(chat sin conexión).

  • En RMI, en su mayoría objetas la serialización, pero en JMS puede ser que no la necesidad

Aquí está el más detalle sobre las terminologías anteriores

Ahora, ¿cuál es el significado suelto y estrechamente acoplado ¿en RMI y JMS?

La mensajería permite la comunicación distribuida que está vagamente acoplada. Un componente envía un mensaje a un destino y el destinatario puede recuperar el mensaje del destino. Sin embargo, el emisor y el receptor no tienen que estar disponibles al mismo tiempo para comunicarse. De hecho, el remitente no necesita saber algo sobre el receptor; ni el receptor necesita saber nada sobre el remitente. El remitente y el receptor necesitan saber solo lo que formato del mensaje y qué destino utilizar. En este sentido, la mensajería difiere de las tecnologías estrechamente acopladas, como la Invocación de métodos Remotos (RMI), que requieren que una aplicación conozca los métodos de una aplicación remota.

 -1
Author: Yasir Shabbir Choudhary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-08 10:42:06