Scala
Sending Email with Java and Akka actors
Akka is a concurrent framework written by Scala.
Here I demonstrate sample application to send emails with Akka and implemented in Java.
Reasons I decided to use Akka framework other than concurrency.
- Built-in configurable supervisor strategy to monitor child workers and decide what policy applies when there is an exception.
- Can reschedule delivery when application throwing some specific exception.
- Use of actor routers and allow them to use actor connection pool.
Here is how to create supervision strategy.
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; } } |
Here is how child worker create
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() { } } |
Sample application – https://github.com/rajithd/email-service-akka
Reference: Sending Email with Java and Akka actors from our JCG partner Rajith Delantha at the Looping around with Rajith… blog.