【问题标题】:Are Resque queues created by the main thread or workers?Resque 队列是由主线程还是工作线程创建的?
【发布时间】:2011-10-01 22:33:10
【问题描述】:

我有点困惑,因为我没有设置任何工人(在 Heroku 上),当我这样做时 Resque.enqueue 作业已添加到队列中(但未完成),因此我假设主线程生成了队列。

由于我使用的是 Redis To Go,这不会破坏使用像 Resque 这样的后台进程的目的,因为 Redis To Go 本身就是一个外部托管数据库,因此主线程的初始写入过程将作业添加到队列可能无法预测?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 heroku redis resque


    【解决方案1】:

    当您调用Resque.enqueue 时,Resque 会连接到 Redis 数据库,并添加稍后调用作业所需的信息。然后,worker 连接到 Redis,弹出第一个添加的作业,执行此操作,然后重复。

    所以是的,“主”线程确实连接到 Redis。它是一个外部数据库这一事实并不重要。我的意思是,对于使用 Mongo 数据库插件的人来说,Mongo 数据库也是外部托管的。这个想法是,您要执行的作业比将其添加到 Redis 所需的时间更长。

    【讨论】:

    • 我们添加到队列的工作是发送电子邮件通知(使用 Heroku 上的 sendgrid 插件)。我不确定使用主线程调用外部应用程序(redis to go)是否有意义,以避免调用另一个外部应用程序(sendgrid)。
    • 尝试计算通过 sendgrid 发送邮件所需的时间,以及将作业添加到队列所需的时间。如果将它添加到队列中明显更快,那就去吧。否则,这只是另一个步骤,我会删除 Resque 部分。
    • 好吧。这就是调用诸如 sendgrid 之类的外部应用程序的问题 - 这是完全不可预测的。大多数时候它完全不需要时间,但有时它会停止 1-2 秒。我不知道如何使用 redis 将作业添加到队列中 - 到目前为止速度很快,但我们使用它的时间还不够长,无法真正了解。
    • 你可以随时切换到delayed_job,并在你的应用中添加一个worker。这样作业将在本地执行。否则,我认为使用 Redis To Go 时唯一明显的延迟是网络延迟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 2015-10-10
    • 2019-07-16
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多