2015-06-10 5 views
0

Предположим, что в почтовом ящике есть сообщения. Возможно ли приостановить действие Актера от обработки сообщений и возобновить его в более поздней точке, не удерживая нить.Suspending AKKA actor

Спасибо, Ravi

ответ

0

Akka обеспечивает способ изменения поведения актера с помощью context.become() и context.unbecome(). Он также предоставляет способ stash() и unstash() вашего сообщения, как только вы изменили свое поведение.

Идея состоит в том, чтобы новое поведение, которое в основном ничего не делает (например, приостановлено), но заталкивает сообщения. После выполнения определенного условия актер unbecome() s и unstashAll() сообщения, чтобы вернуть их обратно в почтовый ящик и начать их повторную обработку.

Вы можете найти хороший пример в документации Akka (ищите Stash): http://doc.akka.io/docs/akka/snapshot/scala/actors.html

+0

спасибо .. это также применимо в Java. Мое требование состоит в том, чтобы остановить актера, обрабатывающего любые сообщения (suspend). Запрос на приостановку может основываться на недоступности внешней системы. – cbear

+0

Да, это можно сделать и на Java. Найдите Stash здесь: http://doc.akka.io/docs/akka/snapshot/java/untyped-actors.html. В вашем случае использования, когда внешняя система становится недоступной, вы можете сделать своего актера «приостановленным», когда все новые сообщения будут спрятаны. После того, как внешняя система будет доступна снова, ваш актер не будет блокировать и разблокировать все сообщения. – hveiga

Смежные вопросы