繁体   English   中英

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

[英]Should I create a new quartz job and trigger or one job and many triggers?

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

  1. 创建新作业并在计划电子邮件时触发OR
  2. 创建单个作业,并在每次安排电子邮件时创建新的触发器

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

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

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

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

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

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

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

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

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

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

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


编辑:回应以下评论:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM