#bakka Один из способов использования Akka, подходящий для построения распределённых систем
Координаты
<dependency>
<groupId>org.beykery</groupId>
<artifactId>bakka</artifactId>
<version>1.0.6</version>
</dependency>
При использовании Akka для создания распределённых приложений требуется выполнение различных конфигураций, создание акторов, определение маршрутов и отправка сообщений в указанные акторы. В процессе работы также необходимо слушать различные события кластера и жизненный цикл акторов. Это может быть сложно.
Концепция bakka заключается в том, чтобы помочь разработчикам максимально упростить эти задачи с самого начала. Вам просто нужно писать логику бизнес-процессов внутри специального актора. Когда вам нужно вызвать другой сервис, вы можете использовать найденные акторы и отправлять сообщения согласно своему маршрутизатору.
Для начала необходимо поместить bakka.conf в каталог resource, а свойство bakka.system.name изменить на желаемое имя. bakka.system.classpath должно быть установлено на имя вашего пакета акторов в приложении. При запуске системы все акторы в этом пути будут рекурсивно сканироваться и запущены. Также следует установить свойства roles на нужные вам акторы. Например, если есть актор с названием Backend, его можно добавить в список roles. ```java @Bakka(service = "Backend") public class Backend extends BaseActor {
@BakkaRequest public HI hi(HI hi) { System.out.println(hi + ". . . . . . "); return hi; } }
Этот актор (необходимо наследовать от `BaseActor`) имеет свою службу `Backend`, указанную в аннотации `@Bakka`. Если эта служба
присутствует в списке ролей `bakka.conf`, то этот актор будет автоматически запущен при старте системы. Когда он получает сообщение типа `HI`,
метод `hi` (с аннотацией `@BakkaRequest`) будет вызван. Его возвращаемое значение (`HI`) будет автоматически отправлено обратно текущему отправителю (если он существует).
`Bakka` использует `protostuff` для сериализации сообщений. Все сообщения должны реализовывать интерфейс `org.beykery.bakka.Serializable`,
иначе они не будут сериализованы протостаффом.
При обработке сообщений (например, в методе `hi`), если вам нужно передать сообщение другому актору, вы можете получить доступ к его услугам через свойство `services` и отправить сообщение следующим образом:
```java
@Bakka(service = "Frontend", slaves = {"Backend"})
public class Frontend extends BaseActor {
``````java
@BakkaRequest
public void hi(HI hi) {
System.out.println(hi + ". . . . . . ");
this.services.get("Backend").get(0).tell(hi, self());
}
}
Класс Frontend
имеет аннотацию @Bakka
, которая объявляет зависимые от него акторы (slaves
). Поэтому он может находить эти службы (Backend
) среди своих сервисов. Эти службы могут быть локальными или предоставляются акторами с других узлов системы. Остается выбрать один или несколько акторов в соответствии с логическими требованиями и отправить им сообщение. Когда некоторые узлы системы выходят из строя, Bakka
обрабатывает это, удаляя неработающие акторы из списка услуг; когда некоторые узлы становятся доступными, Bakka
регистрирует и слушает связанные акторы (сервисы); гарантируется правильное изменение услуг.## Заключение
наслаждайтесь этим.
## Заключение
наслаждайтесь этим.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )