38 votes

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 le même type de problème. J'ai lu brièvement sur Invocation de méthodes à distance en Java y Service de messages Java mais il est difficile de 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 eux ?
  • L'un d'eux est-il plus récent que l'autre ?
  • Lequel est le plus courant/populaire dans les entreprises ?
  • Quels avantages ont-ils l'un par rapport à l'autre ?
  • Quand l'un est-il préféré à l'autre ?
  • Sont-elles très différentes dans leur difficulté de mise en œuvre ?

Je pense aussi que Services Web y CORBA abordent le même problème.

43voto

John Points 4035

Vous connaissez déjà les appels de méthode. Mais que faire si l'objet sur lequel vous voulez invoquer la méthode se trouve sur un autre ordinateur ? Vous utilisez RMI pour envoyer l'appel d'un ordinateur (client) à l'autre (serveur). Le client attendre (ou "bloquer") jusqu'à ce que le résultat revienne du serveur. C'est ce qu'on appelle synchrone fonctionnement.

JMS est différent : il permet à un ordinateur d'envoyer un message à un autre - comme le courrier électronique. Le premier n'a pas à attendre de réponse : il peut continuer à faire ce qu'il veut. Il se peut même qu'il n'y ait pas de réponse. Les deux systèmes informatiques ne travaillent pas nécessairement en parfaite synchronisation. asynchrone .

Une autre façon d'envisager la différence : RMI est comme un appel téléphonique, et JMS est comme l'envoi d'un message texte.

RMI est un peu plus ancien 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 y JMS

Si vous démarrez un projet à partir de zéro et que vous ne savez pas lequel utiliser, la question de la synchronisation et de l'asynchronisme est probablement 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. S'ils en utilisent déjà une, je pense qu'il vaut mieux s'en tenir à celle-ci.

32voto

codenheim Points 6836

Vous ne pouvez pas vraiment comparer les deux, c'est comme des pommes et des oranges.

RMI est une forme d'appel de procédure à distance (RPC). Il s'agit d'une API légère, spécifique à Java, qui suppose que l'appelant et le récepteur sont disponibles au moment de la communication.

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

RMI ne gère pas la livraison garantie ou les réponses asynchrones, JMS peut le faire, selon le fournisseur.

JMS permet un couplage lâche au sens de la disponibilité. Les "Services Web" permettent un couplage lâche au sens du protocole et des données, mais ne spécifient pas grand-chose en matière de messagerie fiable, bien que certaines implémentations l'incluent (Windows Communication Foundation) et d'autres non.

ÉDITION : Révisé selon les commentaires. Lorsque j'ai écrit cette réponse en 2010, mon expérience portait en fait sur un seul fournisseur JMS et je ne savais pas qu'il n'y avait pas de fournisseur JMS par défaut.

7voto

giri Points 6255

Invocation de méthodes à distance (RMI) : 1.l'interface RPC native de Java 2.les objets distants peuvent être exécutés avec une sémantique similaire à celle des objets locaux. L'implémentation par défaut utilise un protocole de communication binaire propriétaire, mais RMI peut être implémenté via SOAP.

Système de messagerie Java (JMS) L'interface et la spécification de Java pour les intergiciels orientés message. Des paquets de données peuvent être expédiés vers des files d'attente de messages et des sujets où ils seront traités de manière asynchrone. Les files d'attente ou les sujets ne doivent pas nécessairement être distants. 3. le serveur JMS peut utiliser RMI, SOAP, etc.

-1voto

  • RMI est utilisé pour communiquer des applications étroitement couplées entre elles, alors que JMS est utilisé pour des applications faiblement couplées.

  • RMI est utilisé pour le chat asynchrone (en temps réel) mais JMS est utilisé pour le chat synchrone (hors ligne).

  • En RMI, la sérialisation des objets est la plus courante, mais en JMS, vous n'en avez peut-être pas besoin. besoin de cela

Voici plus de détails sur les terminologies ci-dessus.

Maintenant, que signifie Loosely & tightly coupled dans RMI et JMS ?

La messagerie permet une communication distribuée et faiblement couplée. Un composant envoie un message à une destination, et le destinataire peut récupérer le message à partir de la destination. Cependant, l'expéditeur et le destinataire n'ont pas besoin d'être disponibles en même temps pour communiquer. En fait, l'expéditeur n'a pas besoin En fait, l'expéditeur n'a pas besoin de savoir quoi que ce soit sur le destinataire, et le destinataire n'a pas besoin de savoir quoi que ce soit sur l'expéditeur. L'expéditeur et le récepteur doivent seulement savoir quel format de message et quelle destination utiliser. À cet égard, la messagerie diffère des technologies à couplage étroit, telles que l'invocation de méthodes à distance (RMI), qui exigent qu'une application connaisse les méthodes d'une application distante.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X