2

我有一个注册,成功注册后,我会向用户发送一封电子邮件,欢迎他们使用该软件。目前电子邮件不是异步发送的,这会导致应用程序等到电子邮件发送完毕后才返回响应让我知道它是成功的。这并不理想,因为 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 示例。

4

1 回答 1

1

Akka 任务调度程序正是您正在寻找的:

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()
    );
}
于 2014-06-19T11:49:47.273 回答