我有一个负责生成用户活动报告的 resque 作业类。该类查询数据库,然后执行大量计算/数据解析以向某些人发送电子邮件。我的问题是,像这样具有许多方法(200 行左右的代码)的 resque 作业是否应该填充所有类方法并响应单个 ResqueClass.perform 方法?或者,我应该实例化这个 resque 类的新实例来表示正在生成的单个报告吗?如果这两种方法都正确计算数据并通过电子邮件发送,是否有关于如何处理后台作业的约定或最佳实践?
谢谢你
我有一个负责生成用户活动报告的 resque 作业类。该类查询数据库,然后执行大量计算/数据解析以向某些人发送电子邮件。我的问题是,像这样具有许多方法(200 行左右的代码)的 resque 作业是否应该填充所有类方法并响应单个 ResqueClass.perform 方法?或者,我应该实例化这个 resque 类的新实例来表示正在生成的单个报告吗?如果这两种方法都正确计算数据并通过电子邮件发送,是否有关于如何处理后台作业的约定或最佳实践?
谢谢你
两种策略都有效。我通常从并发的角度来处理这个问题。当您的工作正在运行时,为您的工作提供服务的 resque 工作人员很忙,因此,如果您有 N 个工作人员并且其中有 N 个工作正在运行,那么您将不得不等到一个工作完成后,队列中的其他任何内容才会被处理。
也许没关系 - 如果您一次只有一份报告,那么您实际上将指定一名工作人员来运行报告,您的其他人可以做其他事情。但是,如果您有一堆这些并且需要一段时间,您可能会影响队列中的其他工作。
不利的一面是,如果您的报告死了,您可能需要逻辑来从中断的地方继续。如果您为每个用户实例化一次报告,您只需要重试失败的作业 - 不需要“我在哪里”逻辑。