0

我有一个有几千个用户的应用程序。每个用户在队列中可以有 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(首选)或 gearman 轻松实现?

4

1 回答 1

0

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

你可以有
  • 每个用户的管(user1,user2,user3,...)
  • 控制管
然后步骤将是这样的

工作制作人:

  1. 将工作添加到用户的管中。
  2. 添加您刚刚插入到控制管的管的名称。

工作人员:

  1. 保留(无超时)到控制管
  2. 从控制管得到工作
  3. 循环保留超时(超时= 0)到用户的管,直到你得到TIMED_OUT
  4. 从 1 重新开始。

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

reverse-with-timeout 超时值为 0 将导致服务器立即返回响应或 TIMED_OUT。超时的正值将限制客户端在保留请求上阻塞的时间量,直到作业变得可用。

参考文档

于 2013-11-21T15:24:07.623 回答