【问题标题】:How to use gearman to perform recuring tasks如何使用德语执行重复性任务
【发布时间】:2017-07-14 00:13:27
【问题描述】:

我正在用 PHP 制作一个依赖于 REST API 的支付系统。

我的业务逻辑:

如果有人通过我的系统提交请求,可以说“将钱从 A 点转移到 B 点”,该交易将保存在我的数据库中,状态为:“已提交”,然后提交到(移动网络运营商)API URL,该 URL处理它并将状态返回到我的系统,将我的数据库事务状态更新为新状态“例如:等待确认”并通知用户传入状态。

问题是:

我的应用程序应该以 10 秒的间隔持续请求检查新状态并向用户显示新状态,直到最后一个状态为“完成或拒绝”,因为状态范围可以为 5,例如:“等待中,拒绝、批准、完成……'。

我已经设法使用 AJAX 来做到这一点,在 JavaScript 中设置时间间隔。但如果用户关闭浏览器或在他们结束时发生任何事情,它就会停止请求。导致我的应用程序不知道钱是否已交付。

我想知道如何在不涉及 JavaScript 时间间隔的情况下使用 Gearman 在后台运行这个循环任务,谢谢

【问题讨论】:

    标签: php mysql ajax gearman


    【解决方案1】:

    Gearman 更像是一个工作队列,而不是一个调度系统。我可能会设置某种类型的 cron 作业,它将查询数据库并以异步方式将适当的作业提交给 Gearman。使用 gearman,您将需要使用 libdrizzle 或其他东西来处理持久队列,还需要使用某种类型的 GearmanWorker 进程管理器来一次运行多个作业。目前有许多项目在这方面取得了不同程度的成功,例如https://github.com/brianlmoon/GearmanManager。我评估过的工人经理都没有真正达到标准,所以我创建了自己的,可能很快就会开源。

    【讨论】:

      【解决方案2】:

      您不会在后台使用Gearman 执行循环任务,这通常称为轮询Gearman 通常用作作业队列,用于执行视频压缩、调整图像大小、发送电子邮件或其他您想要“作为背景”的任务。

      我不建议在前端或后端轮询数据库。轮询通常被认为是不好的,因为它不能扩展。在您的 javascript 示例中,您可以看到随着应用程序的增长并被成千上万的用户使用,轮询将在您的服务器上引入大量不必要的流量和负载。在后端,执行轮询的机器是单点故障。

      您要探索的架构是 message queue。它类似于编程中的侦听器/观察者模式,但应用于系统级别。这将允许一个更强大的系统来处理中断,从用户关闭浏览器一直到后端系统停止维护。

      【讨论】:

      • 我可以使用什么技术来实现这个架构?例如:Nodejs、网络套接字或任何其他......?,我尝试了解更多关于消息队列的信息,它让我回到了 Gearman
      • 查看 RabbitMQ - rabbitmq.com 以存储您的消息。是的,如果您期待大量请求,我会尝试使用连接到 Node.js 服务器的 Web 套接字。
      • 除了网络套接字之外,“长轮询”也可以工作(您的 10 秒间隔将是短轮询)。它执行一个请求,但连接没有立即关闭。再次与 Node.js 结合使用。
      猜你喜欢
      • 2020-03-26
      • 2010-09-06
      • 2016-01-27
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 2016-06-12
      • 2021-10-15
      • 1970-01-01
      相关资源
      最近更新 更多