Если у меня уже есть существующее веб-приложение java
, которое использует контейнер spring
и servlet
. Каков правильный способ интеграции Akka?
Как и у меня есть Actor1
и Actor2
, которые общаются друг с другом. Каким будет точка входа, чтобы начать использовать этих участников? (например: 1. поместите его туда 2. измените конфигурацию 3. получите ссылку на актера)
Я нашел http://doc.akka.io/docs/akka/2.2-M3/general/configuration.html Но он не дает мне клей. Просто хочу получить реальный пример интеграции.
Есть ли простой пример интеграции?
EDIT: Приложение выполняет поиск, получает некоторые данные извне, сохраняет информацию в файлах.
Приложение довольно большое. Некоторые компоненты/объект могут оставить свою собственную жизнь, то есть из-за прямых клиентских запросов, он может делать некоторые вещи параллельно. Как некоторые одноэлементные объекты, которые в нем имеют изменяемое состояние.
Дело в том, что я точно не знаю, где я могу применить актеров, я расследую это. Но у меня уже много синхронизированных блоков здесь и там.
И это уже, я считаю, своего рода знак того, что актеры могут быть применены. (потому что я не уверен, возможно, я забыл поместить некоторые синхронизированные, и, конечно, для него нет интеграционных тестов)
О конфигурации, я просто не уверен, должен ли я настроить какой-то application.conf для let Actrors/Akka там (, так как сама документация описывает).
Что я вижу:
@Component("someManager")
public class SomeManager {
List<Some> something; // mutable state, that why I use locks here.
// methods: add(), delete(), update()
}
Я мог бы сделать это SomeManagerActor
SomeManager
используется из controller
. Таким образом, было бы неплохо иметь контроллер Актер также? Я хочу получить обратную связь в (onReceive
() метод).
Это своего рода спорный... Это еще одна причина, по которой мне нужен пример.
Я считаю, что могу улучшить приложение, избавляясь от всего материала synchronized/whait/notify
, перенося обязанности на участников, используя сообщения как способ общения с ними/между ними.
Или, например, это, он может быть актером для записи в файлы свойств:
EDIT:
Например, на данный момент я нашел: Чтобы отправить Actor1 сообщение в Actor2, я использую трюк:
// somewhere in existing code
public void initActors() {
ActorSystem system = ActorSystem.create(example");
// initializing
final ActorRef actor1 = system.actorOf(Props.create(Actor1.class), "actor1");
}
У Actor1 есть метод preStart()
, который запускается, как только я получаю ссылку на него (см. выше). И он отправляет сообщение в Actor2:
@Override
public void preStart() {
Но я не уверен, что это хорошо, почему нужно инициализировать двух актеров, чтобы сделать их работа.