首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis中持久队列的工作人员管理

Redis中持久队列的工作人员管理
EN

Stack Overflow用户
提问于 2015-06-15 21:50:38
回答 1查看 542关注 0票数 0

使用LPUSHBRPOPLPUSH (http://redis.io/commands/rpoplpush)在Redis中实现持久队列是一种众所周知的模式。然而,为了扩大规模,设计需要满足来自主要任务队列的多个工作人员/消费者,即BRPOPLPUSH

因此,标准似乎是,对于每个工作人员,都有一个单独的processing_queue来记录特定工作人员正在执行的任务,这样,该工作人员就可以跟踪在处理过程中它退出时还需要做什么。

关于这个processing_queue,我有两个问题

  1. 在工人的中,在任何时候最多有一个项/任务是正确的吗?我假设一个工作人员在主任务队列processing_queue之前先检查它自己的BRPOPLPUSH中的任何剩余任务。如果是这样的话,我们可以使用任意一个RPOPLPOPLREM来删除工作人员完成处理后的任务(或者它可以简单地删除列表)。我们甚至可以使用一个集合而不是一个列表。为什么这么多人选择使用LREM,而没有其他原因呢?
  2. 我见过许多人推荐使用相应工作人员的进程ID来标识单个processing_queue。但是,当旧工作人员退出时,一个新的进程ID (很可能是新的)生成时会发生什么情况呢?新工作人员如何查找其前任的processing_queue来完成可能的遗留任务?我计划使用Supervisor来管理我的工作进程,如果这有区别的话。
EN

回答 1

Stack Overflow用户

发布于 2015-06-15 22:30:52

  1. 这要看情况了。如果你只对让工人从主队列中拉出一个任务感兴趣,处理它,冲洗并重复,然后是的。然而,这并不是一个困难的要求,而是一个设计的选择。例如,当要序列化从主任务派生的作业时,可以让工作人员将其他项推送到processing_queue中。
  2. 我不熟悉Supervisor,但您可以保留一个单独的数据结构--在这里最好使用排序集--员工的标识符作为元素,时间戳作为他们的分数。让员工定期更新他们的时间戳,并且当您启动一个新员工时,让它检查那些已经空闲太久的员工的设置。当发现这种情况时,试着确定它实际上已经死亡,然后让新工人接管相关的processing_queue (即in )。使用RENAME)。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30855571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档