每个用户的Beanstalkd队列进程

时间:2013-11-19 08:13:10

标签: php architecture worker beanstalkd job-queue

我有一个拥有几千个用户的应用程序。每个用户可以在队列中拥有10-100个作业。我不想让我的工人(~10)处理10个不同用户的10个工作,而不仅仅是10个工作(可能来自同一个用户)。

user1
    job1
    job2
    job3
    job4
    job5
user2
    job6
    job7
    job8
user3
    job9
    job10
    ...

所以在上面的例子中,我希望我的工作人员按以下顺序处理:

worker1 -> job1, job2, job3
worker2 -> job6, ...
worker3 -> job9, ...
...

有没有什么方法可以很容易地用beanstalkd(首选)或齿轮手来实现?

1 个答案:

答案 0 :(得分:0)

在这种情况下,我认为您可以使用tube功能。

你可以有
  • 每个用户的管(user1,user2,user3,...)
  • 控制器管
那么一步就是这样的

职业生产者:

  1. 将作业添加到用户的管中。
  2. 添加您刚刚插入控制器管的管名称。
  3. 求职者:

    1. 保留(没有超时)到控制器管
    2. 从控制器管获得工作
    3. 循环保留 - 超时(超时= 0)到用户管,直到你得到TIMED_OUT
    4. 以1开始。
    5.   

      反向这将返回新保留的作业。如果没有工作可以保留,   beanstalkd将等待发送响应,直到有一个响应可用。

           

      <强>反向与超时   超时值为0将导致服务器立即返回a   响应或TIMED_OUT。超时的正值将限制数量   客户端将阻止保留请求直到作业成为时间   可用。

      reference docs