2016-07-08 3 views
0

Говорит, что если у меня есть Актер для доступа к базе данных, актер является экземпляром singleton для обработки всех клиентов или нескольких экземпляров для нескольких клиентов? Активаторы preStart() и postStop() вызываются только один раз для всех экземпляров? Или будет вызываться, когда создается каждый новый экземпляр Actor? Хорошо ли вводить код инициализации базы данных внутри preStart(), а код возврата соединения внутри postStop()?Akka Actor preStart() & postStop() методы поведения?

Благодаря

+0

каждый раз, когда вы создаете нового актера из вашего класса актора, который наследует функции 'preXX'' Actor', вызывается. Итак, это не синглтон –

ответ

2

Это вроде как спрашивать, если объект является точкой. Если вы только когда-либо создадите один из Актер базы данных, он будет вести себя как одноэлементный, но в целом актеры не сингл.

Даже если вы только что создали его, вам все равно нужно подумать, когда он может быть перезапущен системой актеров или супервизором.

[Update]

методы жизненного цикла называются для каждого актера - они являются независимыми структурами.

Если вы создаете актера для обработки запросов на базу данных/доступа к данным, у меня, вероятно, будет один актер, который имеет синтаксическую семантику, но внутренне он мог бы создавать и контролировать столько или несколько Актеров, которые фактически занимаются вызовами базы данных , Это позволит вам обрабатывать инициализацию и очистку базы данных в одном месте (актер верхнего уровня) и позволить вам масштабировать внутренне (при необходимости), создавая больше Актеров для обработки запросов и контролируя их для правильной обработки ошибок.

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

+0

Я изменил свой вопрос, однако теперь я знаю, что актеры не одиночные, поэтому я не могу поместить мою инициализацию базы данных в 'preStart()', закрытие базы данных в 'postStop()'. –

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