Akka — это параллельная среда, написанная Scala .
Здесь я демонстрирую пример приложения для отправки писем с помощью Akka и реализованный на Java.
Причины я решил использовать фреймворк Akka кроме параллелизма.
- Встроенная конфигурируемая стратегия супервизора для мониторинга работающих детей и определения того, какая политика применяется в случае возникновения исключения.
- Может перепланировать доставку, когда приложение выдает какое-то конкретное исключение.
- Использование актерских маршрутизаторов и позволяет им использовать пул актерских соединений.
Вот как можно создать стратегию надзора.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
class EmailServiceActor extends UntypedActor { private static SupervisorStrategy strategy = new OneForOneStrategy( 10 , Duration.create( "1 minute" ), new Function<Throwable, Directive>() { @Override public Directive apply(Throwable t) { if (t instanceof MessagingException) { return resume(); } else if (t instanceof Exception) { return stop(); } else { return escalate(); } } }); @Override public void onReceive(Object message) { getContext().actorOf( new Props(EmailServiceWorker. class )).tell(message, self()); } @Override public SupervisorStrategy supervisorStrategy() { return strategy; } } |
Вот как детский создать
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
class EmailServiceWorker extends UntypedActor { @Override public void onReceive(Object message) { try { EmailService emailService = new EmailService(); emailService.sendEmail(); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (MessagingException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } @Override public void preStart() { // getContext().system().scheduler().scheduleOnce(Duration.create(5, TimeUnit.SECONDS), self(), "emailWorker", getContext().system().dispatcher(), null); } @Override public void postStop() { } } |
Пример приложения — https://github.com/rajithd/email-service-akka
Ссылка: Отправка электронной почты с актерами Java и Akka от нашего партнера JCG Раджита Деланта в блоге Looping with Rajith… .