Я работаю над внедрением небольшого языка для отправки задач на выполнение и контроль выполнения потока. После отправки задачи в мою систему пользователь получает будущее (на котором он может вызывать блокировку get() или flatMap()). Мой вопрос: правильно ли отправлять фьючерсы в сообщениях Akka?Отправляет фьючерсы в сообщениях Akka OK?
Пример: актер А посылает сообщение Response актеру B и Response содержит будущее среди полей. Затем в какой-то момент А выполнит обещание, из которого было создано будущее. После получения ответа B может вызвать функцию flatMap() или get() в любое время.
Я спрашиваю, потому что сообщения Akka должны быть неизменными и работать, даже если актеры находятся на разных JVM. Я не вижу, как мой пример выше может работать, если актеры A и B находятся на разных JVM. Кроме того, есть ли какие-либо проблемы с моим примером, даже если актеры находятся на одной JVM?
Что-то подобное сделано в принятом ответе in this stackoverflow question. Будет ли это работать, если актеры находятся на разных JVM?
Это хороший ответ на вопрос, я отметил его как ответ. Тем не менее, у меня одновременно могут быть миллионы задач в моей системе, поэтому я хотел бы избежать создания участников для каждой задачи для проблем с производительностью. Я сделаю это требование, чтобы соответствующие части системы (участники A и B в моем примере) находились на одной JVM и возвращали фьючерсы. – Davor
Если ваш обработчик просто ставит в очередь задачи, используя обещание/будущее, чтобы сигнализировать о последующей обработке, а затем завершить, все это может быть так же просто, как использовать 'ask' напрямую. таким образом, ваш обработчик все равно получает простое сообщение и вместо того, чтобы создавать «Promise» и немедленно его возвращать, он сохраняет «отправитель» и выполняет «tell» на нем при завершении. Ручки 'ask' превращают это в« Будущее » –
@ArneClaassen: Почему удаленные действующие лица не работают в описываемом им сценарии? –