【发布时间】:2019-03-11 21:46:37
【问题描述】:
我有一个多租户 Rails 应用程序,其中包含多个 delay_job 工作人员。
为了避免重叠租户特定的工作,我想将工作人员彼此分开,使每个工作人员一次只处理一项特定于租户的任务。
我考虑过使用(命名的)queue 列并添加“tenant_1”、“tenant_2”等。不幸的是,队列必须在配置期间命名,因此该原则对于许多租户来说不够灵活。
有没有办法自定义delayed_job 选择下一个任务的方式?还有其他方法来定义范围吗?
【问题讨论】:
-
这是否意味着您需要为系统中的每个租户至少启动 1 个工作人员?除非每个租户也拥有自己的服务器,否则这听起来不太可扩展。每个工作人员都将整个 Rails 应用程序保存在内存中。
-
@Unixmonkey 只有正在运行的工作人员才会消耗内存,对吧?不是预定的。
-
我试图让一群工人同时只为不同的租户工作。
-
调度作业只是意味着序列化运行作业所需的数据并将其添加到
delayed_jobs表中,您通常仍然有一个空闲的工人池等待接作业并处理它们。如果您在安排工作的同时解雇了一名工作人员,并且在完成时让它自行终止,我也许可以看到这个工作,但这仍然是很多开销,并且您可能必须重新实现自己的重试逻辑.
标签: ruby-on-rails scope multi-tenant delayed-job