2010-04-05 90 views
35

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 realmente ver la diferencia. Java RMI parece estar más estrechamente acoplado que JMS porque JMS usa comunicación asincrónica, pero de lo contrario no veo grandes diferencias.¿Cuál es la diferencia entre Java RMI y JMS?

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

También creo que Servicios Web y CORBA dirección el mismo problema.

+0

Suenan como preguntas de entrevista porque parece que ha agrupado dos términos que suenan similares pero que se deben considerar muy diferentes a cualquiera que los entienda. –

+0

No 'abordan el mismo tipo de problema'. – EJP

Respuesta

30

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

RMI es una forma de Llamada a procedimiento remoto (RPC). Es una API liviana y específica de Java que espera que la persona que llama y el receptor estén disponibles en el momento de la comunicación.

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

RMI no se ocupa de entrega garantizada o respuestas asincrónicas, JMS puede, dependiendo del proveedor.

JMS permite un acoplamiento libre en el sentido de disponibilidad. "Servicios web" permite un acoplamiento flexible en el sentido de protocolo y datos, pero no especifica mucho en el camino de mensajes confiables, aunque algunas implementaciones sí lo incluyen (Windows Communication Foundation) y otros no.

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

+0

JMS a no es un subsistema de mensajería confiable ni una alternativa a MQSeries. Es una * API * de mensajes * que puede * hablar con * MQSeries, entre muchos otros sistemas de mensajería. – EJP

+0

@mrjoltcola: hola puede echar un vistazo en http://stackoverflow.com/questions/29683209/differences-between-jms-and-corba –

39

Ya conoce las llamadas a métodos. ¿Qué ocurre si el objeto sobre el que desea invocar el método está en una computadora diferente? Utiliza RMI para enviar la llamada de una computadora (cliente) a la otra (servidor). El cliente va a espere (o "bloque") hasta que el resultado regrese del servidor. Esto se llama operación sincrónica .

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

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ías intentar hacer un tutorial sobre cada uno. RMI y JMS

Si vas a empezar 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. Entonces, si ya están usando uno, entonces sugeriría que probablemente sea mejor seguir con ese.

8

Remote Method Invocation (RMI): interfaz RPC nativa de 1.Java 2.Remote objetos se pueden ejecutar con una semántica similar a los objetos locales aplicación 3. La omisión utiliza un protocolo de comunicación binario propietario, pero RMI pueden ser implementado por medio de SOAP

sistema de mensajería Java (JMS) y la especificación de interfaz de 1.Java a Message Oriented Middleware 2.Packets de datos pueden ser enviados a las colas de mensajes y temas donde serán operados de forma asíncrona. Las colas o temas no tienen que ser a distancia 3.JMS servidor podría estar utilizando RMI, SOAP, etc.

-1
  • RMI se utilizan para comunicar aplicaciones fuertemente acoplados entre sí en lugar de JMS utiliza para el acoplamiento flexible.
  • RMI se utiliza para asincrónicamente (chat en tiempo real) pero se usa JMS para ambos sincrónicamente (chat fuera de línea).

  • En RMI, sobre todo que la serialización de objetos pero en JMS puede ser que no lo hace necesidad de que

Here is the more detail about the above terminologies

Ahora ¿cuál es el significado & sin apretar fuertemente acoplado en RMI y JMS ?

La mensajería permite la comunicación distribuida que está ligeramente acoplada. Un componente envía un mensaje a un destino y el destinatario puede recuperar el mensaje desde el destino. Sin embargo, el emisor y el receptor no tienen que estar disponibles al mismo tiempo para poder comunicarse. De hecho, el remitente no necesita para saber algo sobre el receptor; ni el receptor necesita saber nada sobre el remitente. El remitente y el receptor solo deben saber qué formato de mensaje y qué destino usar. A este respecto, la mensajería difiere de las tecnologías estrechamente acopladas, como la Invocación de Método Remoto (RMI), que requieren una aplicación para conocer los métodos de una aplicación remota.

+0

RMI no se utiliza para "chat asíncrono (en tiempo real)". RMI es una tecnología sincrónica.Es JMS que es asincrónico. – EJP

+0

Debe corregir la respuesta. –

Cuestiones relacionadas