【问题标题】:Should I create a new quartz job and trigger or one job and many triggers?我应该创建一个新的石英作业和触发器还是一个作业和多个触发器?
【发布时间】:2010-09-20 19:43:02
【问题描述】:

我希望使用石英来安排电子邮件,但我不确定采用哪种方法:

  1. 创建新作业并在安排电子邮件时触发或
  2. 创建一个作业,并在每次安排电子邮件时创建一个新触发器

我需要以任何一种方式传递消息/收件人等,我不确定创建大量作业是否会开始增加相当大的内存开销,因为很可能会安排数千封电子邮件。

更新:这些电子邮件将由用户安排,而不是由我安排 - 所以我将在运行时以编程方式添加这些电子邮件,它们不会在任何特定时间发出。

【问题讨论】:

    标签: java scheduling quartz-scheduler


    【解决方案1】:

    我会推荐一份工作和一份触发器。将电子邮件请求放入数据库表中,让石英作业查找要发送的新电子邮件。

    【讨论】:

      【解决方案2】:

      您可能会考虑对一组电子邮件进行排队或以其他方式分组,并拥有一个或几个定期(或计划的)作业,然后负责处理“批处理”。

      您甚至可以让 Quartz 作业将电子邮件排队,以供一组工作人员使用和发送。

      我不会推荐数千个 Quartz 作业/触发器 - 这不是该工具的预期用途(恕我直言)。


      编辑:回应以下评论:

      我不建议将数千个 Quartz 作业/触发器用作在同一 JVM 中执行应用程序的框架的一部分,这些作业/触发器将与应用程序的其余部分竞争资源。

      【讨论】:

      • “Quartz 可用于创建简单或复杂的调度来执行数十、数百甚至数万个作业;其任务被定义为标准 Java 组件或 EJB 的作业。” -- 石英主页
      • Quartz 的作者确实建议将它用于数十万个工作。将工具扭曲成它们不是为它们设计的角色是我最讨厌的事情之一,因为它总是会带来麻烦。但在这种情况下,Quartz 被明确设计为以这种方式扩展。
      • 我认为我们比看起来更接近达成协议。独立运行的 Quartz 可以处理你想扔给它的尽可能多的作业/触发器。在应用程序框架中使用时,我不希望它与 Web 应用程序竞争资源,因此我会限制作业/触发器的数量。
      【解决方案3】:

      Quartz 旨在处理数以万计的触发器。这里对可扩展性的主要限制是 JobStore 中的可用空间。一个有合理数据库支持的 JDBCJobStore 应该能够处理数十万个触发器。

      如果可以通过触发器的作业数据映射对单个作业进行参数化,请为每封电子邮件创建一个作业和一个触发器。 Quartz 定期轮询作业存储以查找准备触发的触发器。 Quartz 旨在安全地处理来自该查询的任意大的结果集。

      重要的是——这实际上与 Quartz 本身无关——是你有必要的带宽来执行峰值负载。如果用户倾向于将邮件安排成群,您需要确保您有足够的计算资源来发送电子邮件。这将包括网络带宽、处理和配置足够的工作线程以利用可用资源。

      请注意,如果 Quartz 在执行作业时确实落后太多,您可以配置 Quartz 应该对触发器执行的操作。您可以继续尝试,跳过触发器等。

      【讨论】:

      • 嗨 Erickson,它可以通过触发器的 jobDataMap 进行配置(我没有意识到它的存在),所以我将采用这种处理方式。如果它失败,我将设置触发器继续尝试 - 不能因为当时正在生成另一封电子邮件而错过电子邮件......谢谢。
      【解决方案4】:

      触发器是否基于时间表?您可以使用CronTrigger 来设置更复杂的基于时间的计划,而不是单独的触发器。

      【讨论】:

      • 他们将按时间安排发送,但这些邮件是发给不同人的不同电子邮件,因此多次触发触发器并不会真正起到多大作用。
      • 只需阅读更新。这是否意味着您无论如何都必须创建多个触发器(在运行时)?尽可能多的用户可以制定不同的时间表?
      • 是的 - 会有很多触发器,但我想知道是否最好尝试并减少作业数量,因此单个作业有很多触发器。
      • 只要正在执行的工作始终是相同的,并且可以动态收集变量,是的,你应该可以。
      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      相关资源
      最近更新 更多