我应该创建一个新的石英作业并触发一个作业和多个触发器吗?

时间:2008-11-05 02:26:09

标签: java scheduling quartz-scheduler

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

  1. 创建新作业并在计划电子邮件时触发
  2. 创建单个作业,并在每次安排电子邮件时创建新的触发器
  3. 我需要以任何方式传递消息/收件人等,而且我不确定创建大量工作是否会开始增加大量内存开销,因为很可能会安排数千封电子邮件。

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

4 个答案:

答案 0 :(得分:7)

Quartz旨在处理成千上万的触发器。此处可扩展性的主要限制是JobStore中可用的空间。支持合理数据库的JDBCJobStore应该能够处理数十万个触发器。

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

重要的是 - 这与Quartz本身无关 - 就是你有足够的带宽来执行峰值负载。如果用户倾向于将邮件安排在丛中,则需要确保拥有计算资源才能收到电子邮件。这将包括网络带宽,处理以及配置为利用可用资源的足够工作线程。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可能会考虑排队或以其他方式对一组电子邮件进行分组,并且可以使用单个或几个定期(或计划)的作业来处理“批处理”。

您甚至可以让Quartz作业对电子邮件进行排队,以便消费和发送一组工作人员。

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


编辑:回应以下评论:

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

答案 3 :(得分:0)

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