我可以动态创建resque队列吗?

baa*_*h05 5 schema ruby-on-rails resque

我正在创建一个postgres多租户环境.所以客户端A有schema_1,B有schema_2等.

现在我不知道我将拥有的所有客户端,所以我有一个简单的小rake任务来根据Tenant表中的数据创建新的模式.所有完全动态:要添加新客户端,添加一个新租户,并做一个佣金租户:db:migrate .. tada所有的表都在那里,客户有自己的小世界.(未知的客户名单,但注册时的小问题不是问题)

一切都很好......
除了后台工作.
我希望为每个客户端提供不同的队列.

http://blog.kabisa.nl/2010/03/16/dynamic-queue-assignment-for-resque-jobs/仍然使用硬编码队列.它可以在您编写代码时知道两个之间进行选择,但它们仍然不是真正的动态..不是真的.

所以我的问题是.我有一个字符串"tenant_1"描述我的客户世界.
如何使用该字符串创建仅包含"他"作业的队列.
如何创建真正的动态队列?

Ben*_*son 8

任何人都像我一样遇到这个问题,我在源头找到了答案.

Resque版本1.x(稳定版)列出了这个/lib/resque.rb,并且看起来比直接访问Resque中的Job模块更好的调用方法.

 # This method is considered part of the `stable` API.
  def enqueue_to(queue, klass, *args)
Run Code Online (Sandbox Code Playgroud)

使用本身,对我来说完美无瑕.

Resque.enqueue_to(:my_queue, MyWorker, :my_argument)
Run Code Online (Sandbox Code Playgroud)


baa*_*h05 4

Resque::Job.create("client#{client_id}", MyWorker, 3);

这对我们有用。

  • 以及如何在完成后删除这些队列?或者有1000个客户端队列,其中50%是空闲的也不是问题 (2认同)