Подтвердить что ты не робот

В чем разница между Java RMI и JMS?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

EDITED: пересмотрено за каждый комментарий. Когда я написал этот ответ в 2010 году, мой опыт был на самом деле только с одним JMS-провайдером, и я действительно не знал, что не было никакого JMS-провайдера по умолчанию.

Ответ 2

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

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

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

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

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

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

Ответ 3

Удаленный вызов метода (RMI): Интерфейс RPC 1.Java Объекты 2.Remote могут быть запущены с аналогичной семантикой локальным объектам 3. По умолчанию реализация использует собственный протокол двоичной связи, но RMI может быть реализован поверх SOAP

Система Java Messaging (JMS) Интерфейс 1.Java и спецификация для ориентированного на сообщения промежуточного программного обеспечения 2. Упаковки данных могут быть отправлены в очереди сообщений и темы, где они будут работать асинхронно. Очереди или темы не должны быть удалены 3. Сервер JMS может использовать RMI, SOAP и т.д.

Ответ 4

  • RMI используются для связи плотно связанных приложений между собой, а не с JMS, которые используются для слабосвязанных.
  • RMI используется для асинхронного (чата реального времени), но JMS используется как синхронно (автономный чат).

  • В RMI, в основном вы объективизируете сериализацию, но в JMS может быть, вы не нужно для него

Ниже приведено более подробное описание вышеуказанных терминов

Теперь, что такое Loosely и тесно связанный смысл в RMI и JMS?

Сообщения позволяют распределенную связь, которая слабо связана. Компонент отправляет сообщение получателю, и получатель может получить сообщение от адресата. Тем не менее, отправитель и получатель не должны быть доступны одновременно, чтобы общаться. Фактически, отправитель не нужно знать что-нибудь о получателе; и получателю не нужно ничего знать о отправителе. Отправитель и получатель должны знать только, какой формат сообщения и какой пункт назначения использовать. В этом отношении обмен сообщениями отличается от тесно связанных технологий, таких как Remote Method Invocation (RMI), которые требуют, чтобы приложение знало методы удаленного приложения.