В чем разница между Java RMI и JMS? - PullRequest
38 голосов
/ 05 апреля 2010

При разработке распределенного приложения на Java, кажется, есть несколько технологий, которые решают ту же проблему. Я кратко прочитал о Java Remote Method Invocation и Java Message Service , но на самом деле трудно увидеть разницу. Java RMI кажется более тесно связанным, чем JMS, потому что JMS использует асинхронную связь, но в остальном я не вижу больших отличий.

  • В чем разница между ними?
  • Один из них новее другого?
  • Какой из них более распространен / популярен на предприятиях?
  • Какие преимущества они имеют друг перед другом?
  • Когда один предпочтительнее другого?
  • Отличаются ли они по степени сложности их реализации?

Я также думаю, что Веб-службы и CORBA решают ту же проблему.

Ответы [ 2 ]

41 голосов
/ 05 апреля 2010

Вы уже знаете о вызовах методов. Что если объект, для которого вы хотите вызвать метод, находится на другом компьютере? Вы используете RMI для отправки вызова с одного компьютера (клиента) на другой (сервер). Клиент будет ждать (или "блокировать"), пока результат не вернется с сервера. Это называется синхронная операция.

JMS отличается: он позволяет одному компьютеру отправлять сообщение другому, например, по электронной почте. Первый не должен ждать ответа: он может продолжать выполнять любую работу, какую захочет. Там может даже не быть ответа. Две компьютерные системы не обязательно работают точно по шагам, поэтому это называется асинхронный .

Другой способ думать о разнице: RMI - это как телефонный звонок, а JMS - как отправка текстового сообщения.

RMI немного старше, чем JMS, но это не совсем актуально. Эти два понятия намного старше, чем Java.

Нет большой разницы в сложности. Я думаю, что вы должны попробовать сделать учебник по каждому. RMI и JMS

Если вы начинаете проект с нуля, и вы не уверены, какой из них использовать, то, вероятно, синхронный / асинхронный вопрос является наилучшим фактором принятия решения. Если вы работаете над существующей системой, вероятно, лучше не вводить слишком много новых технологий. Так что, если они уже используют его, я бы посоветовал придерживаться этого.

32 голосов
/ 05 апреля 2010

Вы не можете действительно сравнить два, его яблоки и апельсины.

RMI является формой удаленного вызова процедур (RPC). Это легкий, специфичный для Java API, который ожидает, что вызывающий и получатель будут доступны во время связи.

JMS - это надежный API обмена сообщениями. Поставщики JMS существуют для различных систем обмена сообщениями. Сообщения могут быть переданы, даже если одна из сторон недоступна, если поставщик реализует это. Я знаком с двумя TIBCO и IBM MQ.

RMI не имеет дело с гарантированной доставкой или асинхронными ответами, JMS может, в зависимости от провайдера.

JMS обеспечивает слабую связь в смысле доступности. «Веб-сервисы» допускают слабую связь в смысле протокола и данных, но мало определяют способ надежного обмена сообщениями, хотя некоторые реализации включают это (Windows Communication Foundation), а некоторые нет.

РЕДАКТИРОВАНИЕ: Пересмотрено в комментариях. Когда я писал этот ответ в 2010 году, у меня был опыт работы только с одним JMS-провайдером, и я не знал, что не существует JMS-провайдера по умолчанию.

...