问题标签 [job-queue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 什么构成了作业队列中的重试?
我最初在 Zend 论坛上发布了这个问题,但我认为在这里发布也是明智之举。
确切地说,要重试工作,必须发生什么?我尝试过超时、50x 响应代码,并将状态设置为“FAILED”。
我有一个创建工作的简单脚本......
我试图通过删除consumer.php、从consumer.php 中返回500 并让consumer.php 花费比jqd.ini 中为zend_jobqueue.http_job_timeout 设置的120 秒更长的时间来触发作业重试。这些似乎都不会触发重试。
所以,我问,实际上什么会触发重试?
请帮忙。
php - 使用 Gearman 推迟作业队列
我想将一些耗时的东西提取到队列中。为此,我发现 Gearman 是最常用的,但不知道它是否适合我。我们要做的任务之一是排队发送电子邮件,并希望提供能够取消发送邮件 1 分钟的功能。所以它不应该立即工作,而是在现在 + 1 分钟执行它。这样我就可以在此之前取消作业并且它永远不会被发送。
有没有办法做到这一点?
它将在 debian 上运行。并且应该可以从 php 中使用。到目前为止,我发现的唯一一件事是在 Gearman 中安排一个特定日期和时间的工作,但它运行在没有广泛传播的东西上:(
c# - C# .NET 工作负载处理 a'la 作业队列处理示例的想法?
作为我不断学习如何使应用程序更好地扩展的过程的一部分,我目前正在尝试为队列找到一个方向,即工作队列或工作量处理,无论你喜欢哪个短语。
在遥远的过去,我使用了 IBM MQ/Series - 它适用于金融应用程序,但如果我记得的话,它相当重。
我知道 MSMQ,也听说过不少其他的。
但首先,这是我的背景
我有一个 C#/.NET 后端 Web 应用程序,它通过 AJAX 调用等向 Javascript(主要是 jQuery 等)前端提供数据等。我有一种情况,其中某个操作涉及上传一些文件,设置一些记录数据库中的条目,向一些用户发送电子邮件等。因此,由于可能的时间延迟,我当然不想让这个过程“在线”/“实时”,而且我确信网络服务器/数据库等的开销。
因此,考虑到我需要排队和处理的“消息”类型,什么是一个好的起点(我不应该在这里简单地说!)?我应该使用 MSMQ 和/或 SQL 2008 服务代理程序,还是 ZeroMQ 之类的东西运行 - 还是应该简单地创建自己的轻量级工作负载队列服务?
我再次意识到,在没有看到全貌的情况下,很难提出完整的建议,但是任何起点都非常感谢!
大卫
perl - 自重排作业队列的方法
我有一个作业队列(使用 Amazon SQS),它将作业交给许多机器,以通过 HTTP 获取和处理各种文档。有数百个不同的主机被访问,并且这些作业没有可预测的顺序。
为了礼貌,我不希望我的系统反复锤击单个主机。因此,如果我得到一个作业 #123 来从 example.com 获取一些东西,但我发现我刚刚在过去 X 秒内从 example.com 获取了另一个东西,我应该继续做其他事情并将作业 #123 保存为之后。
问题是,实现这种模式的好方法是什么?
第一步似乎是让工作运行者在某处保留所有域的列表,以及最后一次访问该域上的某些内容。我想这可能是一个简单的数据库表。
如果消息处理器获得必须推迟的工作,那么有许多可能的选择。
只需将消息的副本推送到队列的末尾,然后将其丢弃而不执行。希望下次它出现时,已经有足够的时间过去了。这可能会导致大量冗余 SQS 消息,特别是如果同一域的大型作业集群同时通过。
在礼貌要求可以执行该工作之前,需要多睡几秒钟。这可能会导致许多队列处理器同时无所事事。
接受该作业,但将其保存在每个队列处理器的某个本地队列中。我想每个处理器都可以通过这种方式“声明”许多工作,然后选择以任何顺序处理它们以达到最大的礼貌。这仍然是不可预测的,因为每个队列处理器都需要知道所有其他队列处理器所命中的域。
为每个域建立单独的队列,并为每个队列设置一个专用进程。每个进程在执行每个作业之间都必须暂停 X 秒,因此有很多睡眠进程开销,但这也许不是一件坏事。
你有设计这种东西的经验吗?你会推荐什么策略?
c# - 具有延迟事件通知的 C# 作业队列实现
我正在寻找 .Net (3.5) 中现有的作业队列实现,我想知道是否有人有好的建议。我假设没有工作队列能够完全按照我们的意愿行事,所以我正在寻找一个可以轻松扩展的队列。
我们的基本要求:
- 需要能够并行或串行运行作业。有些作业可能必须串行完成,有些可能能够并行运行,即使这些串行作业正在运行。
(我想从技术上讲,我们可以有 2 个作业队列,但基本实现仍然需要能够同时处理这两个。) - 需要能够让作业触发进度事件 - 但我们希望事件能够在它们准备好时触发,或者排队然后根据来自 UI 的轮询触发。
(我们希望在主 GUI 线程中处理所有事件,因此在 GUI 更新时,我们希望触发自上次更新以来发生的所有事件。)
谢谢,里
龙
php - node.js 中的作业队列
我正在寻找可以由 php 调用的 node.js 中的作业队列管理器。这适用于需要发送电子邮件、创建 pdf 文件等的 web 应用程序,我想执行 php 进程的异步操作。
流程示例:
- 用户请求一个 php 页面
- php调用作业队列管理器并添加一个任务
- 任务在 node.js 中与 php 异步执行,最好是在它更安静的时候
- 任务是执行一个php脚本
为什么会有这个“复杂”的系统?
- 我们用 php(Zend 框架)编写所有的 Web 应用程序
- 我们想开始学习 node.js
- 我们需要一个异步进程(快速响应!)
- “真正的”任务也应该是一个 php 脚本,以利用已编写的 php 类,轻松访问数据库连接并尽可能 DRY
该系统的用例:
- 用户自行注册,系统将发送欢迎邮件
- 用户完成电子商务订单,系统将发送发票
最后,我们还想使用 node-cron 来执行非系统范围的 cron 任务(非常特定于应用程序)。Node-cron 将调用作业队列管理器,该管理器随后将运行一个 php 脚本。
节点中是否已经有这样的应用程序?
high-availability - 多个 gearman 服务器可以共享同一个 libdrizzle 队列吗?
多个 gearman服务器可以通过 libdrizzle 共享同一个 gearman 队列吗?
我想知道这是否会消除 Gearman 服务器作为单点故障的情况——如果我有多个 Web 节点,每个节点都与同一个 Gearman 服务器通信,那么如果 Gearman 不可用,该站点就会死掉。但是,如果每个 Web 节点都运行自己的 gearman 服务器(并且该节点生成的作业排队到在同一节点上运行的 gearman 服务器),那么单点故障将转移到数据库。(在我们的架构中,这无论如何都是单点故障。)
gearman - gearman 和重试具有不可靠外部依赖的工人
我正在使用 gearman 对各种不同的作业进行排队,其中一些总是可以立即得到服务,而一些可能会“失败”,因为它们需要不可靠的外部服务。(例如,发送电子邮件可能需要经常不可用的 SMTP 服务器。)
如果外部服务出现故障,我想将所有需要该服务的作业保留在队列中,并偶尔(例如每隔几分钟)重试一项作业,直到该服务再次可用。(如果服务几个小时不可用,也许可以选择发送电子邮件。)
但是,我希望尽快将不需要失败服务的工作传递给工人。如何做到这一点?(如有必要,我很乐意将一些逻辑放入工人中,尽管在工人方面节流似乎有点“迟到”。)
ibm-midrange - 如何检索作业队列中的计划作业列表?
我被分配了一项任务,以检查作业当前是否作为计划作业存在于作业队列中。匹配标准是作业的名称 - 只要作业名称与指定的名称匹配,它就会计数。那么有没有简单的方法来返回给定作业队列中的预定作业列表?或者有没有更好的方法来完成我的任务?
ruby - Resque 与 Sidekiq
我正在和一个朋友一起做一个项目,我们一直在使用 Resque 来处理来自我们的 rails 应用程序中数据输入的各种命令。
我们一直在搞乱使用 Sidekiq 的想法,因为它是多线程的,不会占用内存,也不需要为每个工作人员启动 ruby 环境。
我希望实时收集使用 Resque 和 Sidekiq 的人们的一些想法和意见,并解释它们之间的差异。
那么,Sidekiq 对 Resque 的优缺点是什么?