【问题标题】:Message Queue or Scheduler消息队列或调度程序
【发布时间】:2011-02-11 13:31:18
【问题描述】:

我目前正在使用 Quartz Scheduler 执行异步任务,例如在发生异常时发送电子邮件、从 Web 界面发送电子邮件或定期分析流量。

我应该使用消息队列来发送电子邮件吗?这样做是否更有效或更正确?调度程序方法工作得很好。

如果我使用队列并且电子邮件发送失败,队列是否可以稍后重试发送电子邮件?对于需要立即执行的任务,队列方法看起来比调度程序更简单,但对于调度程序任务,调度程序仍然存在,除非队列中的内容比我知道的要多。

我还没有使用过JMS,所以这是我阅读的内容。

沃尔特

【问题讨论】:

    标签: java message-queue quartz-scheduler


    【解决方案1】:

    队列是发送电子邮件之类的更自然的选择。 Quartz 可以硬塞进去,但当你重试之类的事情时,它就不是很合适了。调度程序最适合顾名思义——应该定期发生的任务。

    【讨论】:

    • 我不同意调度程序仅用于定期发生的任务的观点。在我看来,一次性使用它并没有错。如果你使用 Quartz 的持久性作业,它会在关机后继续工作并在集群中工作,并且你可以很容易地标记作业以在它失败时重新执行。见bit.ly/eiSkRS
    【解决方案2】:

    它们确实不同,这取决于您发送电子邮件的目的和频率。 调度程序生成一个基于时间的事件,然后运行一些代码来发送电子邮件。 队列无法触发事件,它需要从某个地方放一条消息,然后 MessageListener 发送一封电子邮件。

    要回答您的问题,队列是发送电子邮件的好工具

    1. 消息需要重新打开 如果操作失败,则队列, 即使 SMTP 不知道是否 电子邮件已到达目的地。
    2. 某些触发器可以打开消息 队列。

    调度器可以在一定的时间间隔运行一些java代码,从而产生时间事件。 如果您想定期发送电子邮件,那么调度程序就是您的最佳选择。

    如果您使用调度程序,那么您应该让调度程序将消息放入队列中。 如果没有,那么您需要让其他触发器将消息放入队列。

    【讨论】:

    • 罗曼 - 听起来不错。我接受了您的评论,因为它更具描述性。我想我会排队去。如果邮件发送失败,我的失败模式是尝试其他类型的通知。
    • @Walter White 电子邮件不是保证交付系统。如果您必须发送此电子邮件,那么您有多种选择。 1) 将其发布在您的网站上并让此人登录并查看其帐户的任何更新。 2)在您的电子邮件中放置一个 URL,让他们在收到邮件时点击,如果没有定期发送。仍然不能保证,你只知道什么时候得到它。 3) 用电子邮件发送一封信(假设是银行的账户信息) 如果需要,可以注册该信函。 2)
    • 我实际上发现使用像 Quartz 这样的调度程序非常适合这个;当使用持久化的时候,它们会在关闭时存活下来,并且内置了一个自然的重试机制。
    【解决方案3】:

    我同意 Tom 的观点,这种异步通信最好通过队列完成。其工作方式类似于遵循观察者模式的发布-订阅者模型。

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 2013-07-31
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多