我最近一直在使用Storm,它包含一个名为fields grouping
(与 Celery 中的概念无关的group()
概念),其中具有特定键的消息将始终路由到同一个工作人员。
只是为了更清楚地定义我的意思,这里是来自 Storm wiki。
字段分组:流按分组中指定的字段进行分区。例如,如果流按“user-id”字段分组,具有相同“user-id”的元组将始终执行相同的任务,但具有不同“user-id”的元组可能会执行不同的任务.
例如,从单词列表中读取,我想将以 a、b、c 开头的单词仅路由到工作进程,将 d、e、f 路由到另一个等。
想要这样做的原因可能是因为我希望一个进程负责数据库读取/写入一组相同的数据,以便进程之间不存在竞争条件。
我正在尝试找出在 Celery 中实现这一目标的最佳方法。
到目前为止,我最好的解决方案是为每个“组”(例如 letter.a、letters.d)使用一个队列,并确保工作进程的数量与队列的数量完全匹配。缺点是每个工作人员只能运行一个进程,以及各种情况,例如工作人员死亡或添加/删除工作人员时。
我是 Celery 的新手,所以如果我所指的概念不正确,请纠正我。