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.
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
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.