redis 多个进程消耗公共的Bull队列,如何保持时间顺序?

ivqmmu1c  于 2023-02-15  发布在  Redis
关注(0)|答案(1)|浏览(158)

一个进程是Bull队列(javascript)的生产者,3个进程是同一队列的消费者。
生产者进程排队的数据是成对的,按时间顺序排列。
每个数据对象如下所示:{订单:1-1},{订单:1-2},{订单:2-1},{订单:2-2}.....
{order:1-1}、{order:1-2}数据配对,各数据按排队时间顺序排列。
它还应该按时间顺序出队。
如果它们像{order:1-2}、{order:1-1}那样出队,则没有用。
当我运行单个消费者进程时,出队数据是按时间顺序排列的。
但是,当多个进程消耗队列时,出队数据不是按时间顺序排列的。
我认为被多进程出队的数据不是FIFO。它看起来出队的顺序不对。
因此,我目前尝试限制访问队列的进程计数。
我认为并发设置可以用于此。

const queue = new Qeueu('test', {
  redis :{
     host : 'localhost',
     port : 6379
  },
  settings : {
     concurrency : 1
  }

但是,结果和以前一样,配对数据的输出不是按时间顺序的。
当我检查队列状态时,活动计数是3。
这意味着3队列被3进程激活了。我的目的是目前只有一个进程访问队列
我认为并发设置不起作用。
或者我用错了。
以下是我的问题总结:
1.在Bull队列(redis)中,如果多个进程使用队列,出队数据是否不按时间顺序排列?
1.或者基本上,在多个进程中不可能保持时间顺序,因为每个进程的处理时间不同。
因此,即使它们按时间顺序读取排队的数据,输出也会乱序。
如果是,按时间顺序有什么解决办法?
1.如果我想让一个进程在某个时刻只能访问一个队列,如何设置Bull队列?

jfgube3f

jfgube3f1#

根据我的调查,公牛队不支持时间顺序。
单过程或多过程的结果是相同的。
如果你想按时间顺序排列,请使用列表,而不是公牛队列。
它在单进程和多进程的情况下都能很好地工作。

相关问题