Вы уже знаете о вызовах методов. Что если объект, для которого вы хотите вызвать метод, находится на другом компьютере? Вы используете RMI для отправки вызова с одного компьютера (клиента) на другой (сервер). Клиент будет ждать (или "блокировать"), пока результат не вернется с сервера. Это называется синхронная операция.
JMS отличается: он позволяет одному компьютеру отправлять сообщение другому, например, по электронной почте. Первый не должен ждать ответа: он может продолжать выполнять любую работу, какую захочет. Там может даже не быть ответа. Две компьютерные системы не обязательно работают точно по шагам, поэтому это называется асинхронный .
Другой способ думать о разнице: RMI - это как телефонный звонок, а JMS - как отправка текстового сообщения.
RMI немного старше, чем JMS, но это не совсем актуально. Эти два понятия намного старше, чем Java.
Нет большой разницы в сложности. Я думаю, что вы должны попробовать сделать учебник по каждому. RMI и JMS
Если вы начинаете проект с нуля, и вы не уверены, какой из них использовать, то, вероятно, синхронный / асинхронный вопрос является наилучшим фактором принятия решения. Если вы работаете над существующей системой, вероятно, лучше не вводить слишком много новых технологий. Так что, если они уже используют его, я бы посоветовал придерживаться этого.