Каково различие между Java RMI и JMS?

Когда разработка распределенного приложения в Java там, кажется, несколько технологий, которые обращаются к тому же виду проблемы. Я кратко читал о Вызове Удаленного метода Java и Службе сообщений Java, но трудно действительно видеть различие. RMI Java, кажется, более сильно связан, чем JMS, потому что JMS использует асинхронную передачу, но иначе я не вижу больших различий.

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

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

38
задан Jonas 7 May 2010 в 12:39
поделиться

2 ответа

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

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

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

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

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

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

32
ответ дан 27 November 2019 в 03:30
поделиться

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

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

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

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

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

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

43
ответ дан 27 November 2019 в 03:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: