5

我正在寻找使用石英来安排电子邮件,但我不确定采用哪种方法:

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

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

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

4

4 回答 4

7

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

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

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

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

于 2008-11-05T16:46:56.023 回答
1

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

于 2008-11-05T03:14:42.297 回答
0

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

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

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


编辑:回应以下评论:

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

于 2008-11-05T02:45:39.357 回答
0

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

于 2009-06-18T19:57:07.500 回答