我注册成功注册时,我向用户发送电子邮件,欢迎他们使用该软件。目前,电子邮件不是异步发送的,这会导致应用程序等到发送电子邮件之后再返回响应,告诉我它已成功。这并不理想,因为1)它并不真正符合可扩展性的Play风格,2)如果我有多个用户同时注册,那将非常慢。
我有一个包含所有电子邮件方法的类(MailHelper.class),它们都是静态方法。我从另一个用户注册的类(User.class)中调用它们。
如何使用Akka点击并忘记发送电子邮件的电话?我是否需要在User类中执行此操作,还是需要在MailHelper类中执行此操作?
下面是我用来调用发送电子邮件的方法的代码,下面是我用来实际发送电子邮件的代码
调用发送电子邮件方法:
MailHelper.sendRegistrationMail(userName, firstName, surname, registrationDate, emailToken);
发送电子邮件:
public static void sendRegistrationMail(String userName, String firstName, String surname, String registrationDate, String emailToken) {
MailerAPI mail = play.Play.application().plugin(MailerPlugin.class).email();
mail.setSubject("Welcome!");
mail.setRecipient(userName);
mail.setBcc("***@*****.com");
mail.setFrom("Welcome");
String body = views.html.emails.registration.render(userName, firstName, surname, registrationDate, emailToken).body();
mail.sendHtml(body);
}
任何帮助都会很棒,因为我之前从未使用过Akka,到目前为止只在互联网上找到了Scala示例。
答案 0 :(得分:1)
Akka task scheduler正是您所寻找的:
import play.libs.Akka;
import scala.concurrent.duration.Duration;
import java.util.concurrent.TimeUnit;
public static void sendRegistrationMail(String userName, String firstName, String surname, String registrationDate, String emailToken) {
Akka.system().scheduler().scheduleOnce(
Duration.create(10, TimeUnit.MILLISECONDS),
new Runnable() {
public void run() {
MailerAPI mail = play.Play.application().plugin(MailerPlugin.class).email();
mail.setSubject("Welcome!");
mail.setRecipient(userName);
mail.setBcc("***@*****.com");
mail.setFrom("Welcome");
String body = views.html.emails.registration.render(userName, firstName, surname, registrationDate, emailToken).body();
mail.sendHtml(body);
}
},
Akka.system().dispatcher()
);
}