一个常见的 beanstalkd 工作流程是让许多工作人员在队列/管道上侦听作业,在处理该作业时锁定该作业,然后删除该作业,以便其他工作人员无法重新处理它。如果作业失败(例如,资源无法完成处理),该作业可以滑回队列中,让另一个工人接手该作业。
ZeroMQ 可以使用这种方法吗?例如,使用 pub/sub 模型可以多个订阅者接收同一个作业并同时处理它吗?push/pull 或 req/rep 会提供类似的设置吗?
一个常见的 beanstalkd 工作流程是让许多工作人员在队列/管道上侦听作业,在处理该作业时锁定该作业,然后删除该作业,以便其他工作人员无法重新处理它。如果作业失败(例如,资源无法完成处理),该作业可以滑回队列中,让另一个工人接手该作业。
ZeroMQ 可以使用这种方法吗?例如,使用 pub/sub 模型可以多个订阅者接收同一个作业并同时处理它吗?push/pull 或 req/rep 会提供类似的设置吗?
我确信 ZeroMQ 可以为你提供这个。但是请记住,ZeroMQ 并不是真正的队列。这是一个高级网络库。自然,使用提供的原语,您可以按照您的描述进行操作。
如果您不介意多次完成相同的工作,您的具体案例似乎可以实现为发布/订阅系统。我推荐阅读ZeroMQ 指南,尤其是第 5 章。
尽管我确信您可以使用 ZeroMQ 执行您所描述的操作,但我会首先搜索一个已经执行此操作的队列。