Spring Async RMI Call - PullRequest
       10

Spring Async RMI Call

0 голосов
/ 12 февраля 2010

Возможно ли вызывать Java RMI асинхронно? Я хотел бы, чтобы мой вызов RMI немедленно возвращался, и чтобы сервер вызывал обратный вызов после завершения задачи.

В настоящее время я бы использовал поддержку RMI из среды Spring, и я не смог найти никакой документации, описывающей это весной, я подозреваю, что мне нужно будет реализовать это самостоятельно. Пожалуйста, приведите примеры, если это возможно.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 21 ноября 2014

Я не смотрел Spring batch и Spring Integration, но без изменения протокола RMI единственный способ реализовать асинхронный вызов - это охватить новый поток, который ожидает результата от сервера, и это не настоящий асинхронный вызов.

Способ получить истинный асинхронный вызов:

  1. Реализация RMI с помощью NIO.
  2. Когда вызывается прокси, поместите запрос в селектор NIO и немедленно верните вызывающему результат будущее.
  3. Каждый запрос должен иметь уникальный идентификатор запроса, и когда с сервера приходит ответ с этим идентификатором, правильное будущее должно быть разрешено.

Существует только одна реализация такого асинхронного RMI (я не уверен, что он готов к производству).

Вот хорошее объяснение с диаграммой последовательности

2 голосов
/ 12 февраля 2010

RMI является синхронным и не поддерживает обратные вызовы, насколько я знаю.

JMS - это способ Java EE выполнять асинхронные вызовы. Если вы используете Spring, это будет POJO, управляемый сообщениями.

Еще одно место, которое вы можете посмотреть, поскольку вы уже используете Spring, - это Spring Batch или Spring Integration . Я бы попробовал любой из них, прежде чем сам это написать.

Но если это не сработает для вас, ваше подозрение верно - вам придется реализовать это самостоятельно.

...