【问题标题】:How to send an email every half an hour if certain condition is met during that period?如果在此期间满足某些条件,如何每半小时发送一封电子邮件?
【发布时间】:2014-09-18 06:17:45
【问题描述】:

我有下面的方法,每分钟从后台线程调用一次。

在我下面的代码中,如果我的unauthorizedCount 不等于零,那么我会发送一封电子邮件。

private void callMetrics() {

    // .. some other code

    // send an email for unauthorized count
    if (Integer.parseInt(unauthorizedCount) != 0) {
        // send an email here
    }
}

现在,如果我的unauthorizedCount 不为零,那么它至少会在一个小时内不为零,所以这意味着它将继续每 1 分钟发送一封电子邮件,持续一个小时,因此我们的电子邮件将被此信息淹没电子邮件,这就是我不想要的。

现在我想要做的是 - 只要unauthorizedCount 不为零,它就会发送第一封电子邮件,但是我不想在下一分钟发送另一封电子邮件,因为我的后台线程每 1 运行一次分钟,我想半小时后再发出。所以基本上我想在未授权计数非零时发送我的第一封电子邮件,但如果在下一分钟再次非零,那么我不想发送另一封电子邮件,如果unauthorizedCount 非零,我将发送另一封电子邮件半小时后归零。

我怎样才能做到这一点?我应该在这里使用一些乘数吗?

【问题讨论】:

  • 保留lastSent时间并在发送前检查?
  • 我明白了,你能提供一个例子来说明我将如何实现这一目标吗?

标签: java algorithm


【解决方案1】:
private void callMetrics() {

    // .. some other code

    // send an email for unauthorized count
    long now = new Date().getTime();
    if (Integer.parseInt(unauthorizedCount) != 0 && satisfiesSinceLast(now)) {
        // send an email here
        lastSent = now;
    }
}

private void satisfiesSinceLast(long now) {
    return lastSent == -1 || now - lastSent > 30*60*1000;
}

lastSent 保留为该类的成员,使用-1 进行初始化(一开始没有发送任何内容)并在每次发送时更新。然后,当您检查您的状况时,请检查自上一封电子邮件以来是否已经 30 分钟 (30*60*1000)。

【讨论】:

  • 感谢 Mateusz,但是当未授权计数不为零时,此代码会第一次发送电子邮件吗?
  • 如果您希望它在unauthorizedCount 变为非零后立即发送电子邮件,那么您必须修改您的代码以增加该值以调用callMetrics 或让后台线程每隔瞬间
【解决方案2】:

您可以使用其他变量,如 email_sent、mail_at 并在电子邮件发送代码中将其设置为 true,并且 time_at = 当前时间。然后在发送电子邮件之前检查两件事 email_sent 和日期时间 (mail_at) 如果 email_sent 为 false 或当前时间 - time_at 是半小时然后发送电子邮件。 这里的代码不是用指定的语言或开发技术编写的,但您可以很容易地转换成您需要的语言。

`
method()
{
    time_at=Time.Now();
    email_sent=false;
    if(time or event occurs)
    {
        if(!email_sent&&Time.Now-time_at>30*60*1000)//milisecond
        {
            email_sent=true;time_at=Time.Now;
            send_emai();//this is the actual mail sending method
        }
    }
}
`

【讨论】:

  • 我不想修改我的电子邮件发送代码,因为它非常通用,它必须在我的电子邮件发送代码之外。您能否提供一个示例,以便我更好地理解这一点?
猜你喜欢
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
相关资源
最近更新 更多