В чем разница между Java RMI и JMS?
При разработке распределенного приложения на Java, похоже, существует несколько технологий, которые решают одну и ту же проблему. Я кратко прочитал о Java Remote Method Invocation и Java Message Service, но трудно понять разницу. Java RMI, кажется, более тесно связан, чем JMS, потому что JMS использует асинхронную связь, но в остальном я не вижу больших различий.
- В чем разница между ними?
- Один из них более новый, чем другой?
- Какой из них более распространен/популярный на предприятиях?
- Какие преимущества у них есть друг у друга?
- Когда предпочтительнее другого?
- Знают ли они, что они сильно отличаются друг от друга, насколько сложно их реализовать?
Я также считаю, что Веб-службы и CORBA обращаются к той же проблеме.
Ответы
Ответ 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), которые требуют, чтобы приложение знало методы удаленного приложения.