【问题标题】:Jobs processing in background from web application从 Web 应用程序在后台处理作业
【发布时间】:2014-12-02 16:17:15
【问题描述】:

我想在 Web 应用程序执行期间在后台安排和运行大量作业。
该网络应用程序建立在 Symfony 2 和 Doctrine 2 之上。

我知道可以使用 Resque 或 Sidekiq 等库来完成作业处理。 但是,这些库和我的应用程序是用不同的语言编写的,所以我想知道如何运行用 Ruby 编写的 Sidekiq 作业,它应该与我用 PHP 编写的应用程序集成。

我问自己是否唯一的方法是重写大量代码以从 PHP 到 ruby​​ 查询数据库,以便能够在 Sidekiq/Resque 中执行工作。

【问题讨论】:

  • 你考虑过php解决方案吗?
  • 我考虑过在 cmd 中运行带有简单无限循环的 PHP 脚本,但我认为这不是最合适的解决方案。 @Piotr 我会看看你链接我的项目,看起来很有趣,但我想知道表演
  • 这取决于你的项目有多大。如果它不是很大,那么您可以使用无限循环并从 DB 中读取队列,我知道一个这样的内部解决方案,即使对于大公司来说它也能正常工作。如果您不需要队列优先级,多个工作人员等“无限循环”和检查无限循环是否仍在工作的看门狗应该没问题
  • 我的应用程序没有facebook那么大,但让我害怕的是每分钟都会有很多对数据库的查询,然后我必须发送向浏览器和电子邮件发送通知,因此必须可靠且快速地处理作业

标签: php resque sidekiq


【解决方案1】:

你看过Gearman吗?它可以让您像 Sidekiq 一样运行后台作业,但它与语言无关。例如,您可以将 PHP 用于所有事情,或者您可以在 PHP 中排队作业并让实际的工作人员用 Ruby 编写。

【讨论】:

  • 排队是 Gearman 的一个基本组件,所以是的。然而,Gearman 不支持调度。你可以很容易地制作你自己的。创建一个每 X 分钟运行一次的 cron 作业或周期性任务,它检查包含时间戳列、作业名称和序列化参数的数据库表,并运行时间戳在当前时间之前的任何作业。
【解决方案2】:

我在几个使用https://github.com/chrisboulton/php-resquehttps://github.com/chrisboulton/php-resque-scheduler的项目中使用了Resque

它运行得非常好,我什至制作了一个 Symfony 捆绑包,让使用它变得非常容易。 https://github.com/mcfedr/resque-bundle - 支持后台作业和计划作业。比使用 cron 强大得多。

选择 Resque 而不是其他选项的主要原因是它适用于 Redis,易于部署和扩展。在 AWS 上,我使用 Elasticache 托管实例进行完全无忧的设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多