代码之家  ›  专栏  ›  技术社区  ›  atkayla

如何取消队列中的特定作业?

  •  0
  • atkayla  · 技术社区  · 6 年前

    我正在使用rabbitmq构建作业队列。

    假设有一个叫 DO_SOMETHING 作用于 { item: 'A'} 计划在不久的将来。

    我的队列将有如下作业:

    [DO_SOMETHING { item: 'B' }, DO_SOMETHING { item: 'A' }, DO_SOMETHING { item: 'C' }] 
    

    假设发生了什么事 DO_SOMETHING { item: 'A' } 不再需要。

    有没有一种方法可以选择性地从排队的作业中取消/删除它,或者我应该使用像redis这样的东西?

    1 回复  |  直到 6 年前
        1
  •  0
  •   grz.miejski    6 年前

    不能说“没有这样的工具”,因为我可能弄错了,但是rabbitmq队列是FIFO,所以您总是从一开始就消费——按生产作业的顺序。

    最简单的解决方案是检查在消耗作业后给定的作业是否已被取消,并确认此作业已被处理。

    您可以使用外部机制来过滤已删除的作业,但这可能需要一些同步和其他需要担心的事情。