Когда разработка распределенного приложения в Java там, кажется, несколько технологий, которые обращаются к тому же виду проблемы. Я кратко читал о Вызове Удаленного метода Java и Службе сообщений Java, но трудно действительно видеть различие. RMI Java, кажется, более сильно связан, чем JMS, потому что JMS использует асинхронную передачу, но иначе я не вижу больших различий.
Я также думаю, что веб-сервисы и CORBA решают ту же проблему.
Вы не можете сравнивать эти два, яблоки и апельсины.
RMI - это форма удаленного вызова процедур (RPC). Это легкий, специфичный для Java API, который ожидает, что вызывающий и получатель будут доступны во время связи.
JMS - это надежный API для обмена сообщениями. Поставщики JMS существуют для различных систем обмена сообщениями. Сообщения могут передаваться, даже если одна из сторон недоступна, если это реализует провайдер. Два, с которыми я знаком, - это TIBCO и IBM MQ.
RMI не занимается гарантированной доставкой или асинхронными ответами, JMS может, в зависимости от поставщика.
JMS допускает слабую связь в смысле доступности. «Веб-службы» допускают слабую связь в смысле протокола и данных, но не особо определяют способы надежного обмена сообщениями, хотя некоторые реализации включают это (Windows Communication Foundation), а некоторые нет.
РЕДАКТИРОВАТЬ: Изменено с учетом комментариев. Когда я писал этот ответ в 2010 году, у меня был опыт работы только с одним поставщиком JMS, и я действительно не знал, что поставщика JMS по умолчанию не существует.
Вы уже знаете о вызовах методов. Что, если объект, для которого вы хотите вызвать метод, находится на другом компьютере? Вы используете RMI для отправки вызова с одного компьютера (клиента) на другой (сервер). Клиент будет ждать (или «блокировать»), пока результат не вернется с сервера. Это называется синхронной операцией.
JMS отличается: он позволяет одному компьютеру отправлять сообщение другому - например, по электронной почте. Первому не нужно ждать ответа: он может продолжать делать то, что хочет. Может даже и не быть ответа. Две компьютерные системы не обязательно работают точно синхронно, поэтому это называется асинхронным .
Другой способ взглянуть на разницу: RMI - это как телефонный звонок, а JMS - как отправка текстового сообщения.
RMI немного старше JMS, но это не совсем актуально. Эти две концепции намного старше, чем java.
Нет большой разницы в сложности. Я думаю, вам стоит попробовать сделать учебник по каждому из них. RMI и JMS
Если вы начинаете проект с нуля и не уверены, какой из них использовать, то, вероятно, проблема синхронности / асинхронности - лучший фактор решения. Если вы работаете над существующей системой, вероятно, лучше не вводить слишком много новых технологий. Так что, если они уже используют один, я бы посоветовал, вероятно, лучше придерживаться этого.