Quelle est la différence entre Java RMI et JMS?

lors de la conception d'une application distribuée en Java, il semble y avoir quelques technologies qui traitent du même genre de problème. J'ai brièvement lu sur Java Remote Method Invocation et Java Message Service, mais il est difficile de vraiment voir la différence. Java RMI semble être plus étroitement couplé que JMS parce que JMS utilise la communication asynchrone, mais sinon je ne vois pas de grandes différences.

  • Quelle est la différence entre ?
  • l'un d'eux Est plus récent que l'autre?
  • Lequel est le plus commun/populaire dans les entreprises?
  • Quels avantages ont-ils les uns sur les autres?
  • quand l'un est-il préférable à l'autre?
  • sont-elles très différentes quant à la difficulté de leur mise en oeuvre?

je pense aussi que Services Web et CORBA adresse le même problème.

35
demandé sur Jonas 2010-04-05 04:39:26

4 réponses

on ne peut pas vraiment comparer les deux, ses pommes et ses oranges.

RMI est une forme de Remote Procedure Call (RPC). Il s'agit d'une API Java légère qui s'attend à ce que l'appelant et le récepteur soient disponibles au moment de la communication.

JMS est une API de messagerie fiable. Il existe des fournisseurs de JMS pour divers systèmes de messagerie. Des Messages peuvent être transmis, même si l'une des parties n'est pas disponible si le fournisseur de matériel. Les deux que je connais sont TIBCO et IBM. MQ.

RMI ne traite pas de la livraison garantie ou des réponses asynchrones, JMS peut, selon le fournisseur.

JMS permet l'accouplement lâche dans le sens de la disponibilité. "Web Services" permet le couplage lâche dans le sens du protocole et des données, mais ne spécifie pas beaucoup dans la façon de la messagerie fiable, bien que certaines implémentations incluent cela (Windows Communication Foundation) et certains ne le font pas.

révisé: révisé par commentaires. Quand j'ai écrit cette réponse en 2010 mon expérience était en fait avec un seul fournisseur JMS et je ne savais pas qu'il n'y avait pas de fournisseur JMS par défaut.

30
répondu codenheim 2014-09-18 20:01:28

vous connaissez déjà les appels de méthode. Que faire si l'objet que vous voulez appeler la méthode est sur un autre ordinateur? Vous utilisez RMI pour envoyer l'appel d'un ordinateur (client) à l'autre (serveur). Le client va attendre (ou" block") jusqu'à ce que le résultat revienne du serveur. Ceci est appelé synchrone opération.

JMS est différent: il permet à un ordinateur d'envoyer un message à un autre type d'e - mail. Le premier n'a pas à attendre pour un réponse: il peut continuer à faire tout le travail qu'il veut. Il y a peut-être même pas une réponse. Les deux systèmes informatiques ne sont pas nécessairement exactement à l'étape, c'est donc appelé asynchrone.

une autre façon de voir la différence: RMI, c'est comme passer un coup de fil, et JMS, c'est comme envoyer un sms.

RMI est un peu plus vieux que JMS, mais ce n'est pas vraiment pertinent. Les deux concepts sont beaucoup plus anciens que java.

Il n'y a pas beaucoup de différence dans la complexité. Je pense que vous devriez essayer de faire un tutoriel sur chacun d'eux. RMI et JMS

si vous démarrez un projet à partir de zéro, et que vous ne savez pas lequel utiliser, alors probablement la question synchrone/asynchrone est le meilleur facteur de décision. Si vous travaillez sur un système existant, il est probablement préférable de ne pas introduire trop de nouvelles technologies. Donc s'ils en utilisent déjà un, alors je suggère qu'il est probablement préférable de s'en tenir à que l'on.

40
répondu John 2010-04-05 01:12:43

Remote Method Invocation (RMI): 1.L'interface PCR native de Java 2.Les objets distants peuvent être exécutés avec une sémantique similaire à celle des objets locaux. 3.L'implémentation par défaut utilise un protocole de communication binaire propriétaire, mais RMI peut être implémenté sur SOAP

Java Messaging System (JMS) 1.Interface de Java et spécification de L'intergiciel orienté Message 2.Les paquets de données peuvent être envoyés à des files d'attente de messages et des sujets sur lesquels ils seront exploités asynchrone. Les files d'attente ou sujets n'ont pas besoin d'être à distance 3.JMS server pourrait utiliser RMI, SOAP, etc.

8
répondu giri 2010-04-05 03:49:19
  • les RMI sont utilisées pour communiquer des applications étroitement couplées entre elles plutôt que des JMS utilisés pour des applications faiblement couplées.
  • RMI utilisé pour asynchrone(chat en temps réel) mais JMS utilisé pour les deux de façon synchrone (chat hors ligne).

  • Dans le RMI, le plus souvent, vous sérialisation d'un objet, mais dans JMS peut-être vous n'avez pas besoin

Voici plus de détails sur le dessus de terminologies

Maintenant qu'est-ce que le sens vaguement et étroitement couplé dans RMI et JMS?

la messagerie permet une communication distribuée qui est vaguement couplée. Un composant envoie un message à une destination, et le destinataire peut récupérer le message de la destination. Toutefois, il n'est pas nécessaire que l'expéditeur et le destinataire soient disponibles en même temps pour communiquer. En fait, l'expéditeur n'a pas besoin de savoir quelque chose au sujet du receveur, ni le receveur besoin de savoir quelque chose au sujet de l'expéditeur. L'expéditeur et le Destinataire doivent savoir seulement quel format de message et quelle destination utiliser. À cet égard, la messagerie diffère des technologies étroitement couplées, telles que la Remote Method Invocation (RMI), qui nécessitent une application pour connaître les méthodes d'une application distante.

-1
répondu Yasir Shabbir Choudhary 2014-09-08 10:42:06