【发布时间】:2016-12-26 12:40:06
【问题描述】:
我很少有在集群环境中使用石英 + 弹簧运行的作业。这些作业未设置为在集群环境中运行,因此每个作业将根据我们拥有的实例数量运行多次。这些作业在 AWS 环境中运行。所以我们不确定有多少实例会运行,因为我们可以动态增加或减少。所以我们正在重构代码。
问题,让我们以基于特定活动向用户发送电子邮件的工作为例。每天可能有 1000 个用户需要我们发送电子邮件。
目前,由于未设置为在集群环境中运行,因此每个实例都会运行作业并向用户发送有关其活动的电子邮件。所以如果我有 3 个实例正在运行,作业将运行 3 次,相同的电子邮件将发送给用户 3 次。
我们决定使用石英 jdbc 来确保作业只运行 1 次。
我正在寻找有关如何执行以下部分的建议。
让我说我必须向 300 个用户发送电子邮件,而不是在 1 个实例上运行的工作选择用户并将电子邮件发送给 300 个用户,我希望在任何实例上的工作从数据库中获取 300 个用户,然后在其他实例上获取相同的工作实例也参与处理这 300 个用户。最好的方法是什么。我不想将这 300 个用户存储在临时表中并从数据库中挑选用户。有没有一种方法可以将这 300 个用户存储在全局内存中,例如 memcached,并在不同的实例上从那里提取数据(处理用户时的负载平衡)。我不想使用 memcache,所以任何其他可用的选项或我可以继续设计的最佳方式。
【问题讨论】:
-
是您的应用程序在数据库中插入记录吗?还是您的应用程序只从数据库中提取记录并发送电子邮件?
-
这个应用会获取使用rest服务的用户列表,并为每个用户调用其他rest服务发送邮件