2013-07-16 2 views
2

Я использую akka 2.1.2 через ActorSystem внутри Tomcat, и у меня возникают проблемы с его закрытием. Я вызываю system.shutdown(), который закрывает фактических участников, но два потока akka остаются позади и блокируют Tomcat от остановки: планировщик и диспетчер.Как отключить поток диспетчера в akka ActorSystem

Мне удалось выключить планировщик, вызвав system.scheduler.asInstanceOf [DefaultScheduler] .close() (приведение в кавычки не требуется, поскольку для свойства Планировщик не существует метода закрытия). Однако я не могу понять, как остановить поток (ы) диспетчера. Я пробовал хитроумную технику создания объекта в пакете akka.actor, чтобы я мог вызвать system.dispatcher.shutdown() (защищенный метод), но это не сработало - есть еще одна или несколько потоков диспетчера akka вокруг потом.

Как отключить поток (-ы) диспетчера? Он не должен быть идеальным/правильным способом, пока он работает.

+0

В качестве первого шага я обновился до 2.1.4, так как это замена на замену 2.1.2. –

+0

Используете ли вы 'system. isTerminated', чтобы проверить, действительно ли 'ActorSystem' закрыта? Выключение происходит асинхронно с th e 'system.shutdown'. – sourcedelica

ответ

2

Я не уверен, есть ли какой-либо метод shutdown, но есть два метода, которые могут помочь. Как написано в документации:

Когда диспетчер больше не имеет каких-либо актеров на учете, как долго он будет ждать, пока она завершает работу, недобросовестный своим AKKA конфиги «AKKA

Вас. может установить akka.actor.default-dispatcher.shutdown-timeout в reference.conf, а затем detach вы выступили с вашего диспетчера.

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