【问题标题】:How resque removes job from the queue?resque 如何从队列中删除作业?
【发布时间】:2011-07-02 16:03:58
【问题描述】:

我在我的 rails 应用程序中实现了 resque 排队系统。我想知道从入队到从队列中移除的 resque 作业流程。

传统的工作流程,以及从 gem 中使用的方法是,
1. Resque 入队作业(Resque::Job.create) ,
2. Job 调用类的 'perform' 方法(Resque::Job.perform),
3. Resque 从队列中移除作业。

我调试了gem,找到了第3步中使用的方法,但是没找到。正如我调试的那样,方法 Resque::Job.destroy、Resque::Job.dequeue 不负责此任务。谁能告诉我用于从队列中删除作业的方法

请注意,我不想明确删除作业,我想要从队列中删除作业的典型 resque 方法。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby queue resque


    【解决方案1】:

    因此,如果工作人员失败(或者我们按 ctrl+c),则不会留下已删除作业的痕迹。 我认为只有在工作没有任何例外地完成时才应该 lpoped

    【讨论】:

      【解决方案2】:

      Resque 实际上使用 'dequeue' 方法来移除作业:

        def dequeue(klass, *args)
          Job.destroy(queue_from_class(klass), klass, *args)
        end
      

      要从队列中选择一个作业进行处理,请使用“pop”方法:

        def pop(queue)
          decode redis.lpop("queue:#{queue}")
        end 
      

      【讨论】:

        猜你喜欢
        • 2012-05-03
        • 2020-04-30
        • 1970-01-01
        • 2011-10-28
        • 1970-01-01
        • 1970-01-01
        • 2011-07-29
        • 2013-06-20
        • 2011-08-26
        相关资源
        最近更新 更多