h工作人员以下为:在redis之上构建了一个可靠的至少一次作业队列。

[图书馆,未分类的][建议标签]

请参阅自述文件。


[跳到自述]

下载

注意:此软件包具有元数据修订在阴谋集团的描述中比tarball中包含的更新。要打开包含修订的包,请使用“cabal-get”。

维修人员角落

包装维护人员

对于包维护者和黑客托管者

候选人

版本[RSS(RSS)] 0.1.0.0,0.1.0.1
更改日志 CHANGELOG.md公司
依赖关系 伊森,阿托帕塞克,基础(>=4.8 && <5),字节删除,赫迪斯(>=0.6.5),文本,时间(>=1.5),乌伊德(>=1.2.6 && <1.4)[详细信息]
许可证 英思科
作者 丹尼尔·帕特森
维护人员 dbp@dbpmail.net
修订过的 第1次修订制造商赫伯特·瓦莱里奥·里德尔2017-01-01T18:52:57Z
主页 http://github.com/dbp/h工作人员
已上传 通过丹尼尔·帕特森2015年11月2日T00:46:43Z
分配 LTSHaskell公司:0.1.0.1
反向依赖关系 1直接,1间接[详细信息]
下载 总计2089人(过去30天内有9人)
额定值 2.0(票数:1)[估算人贝叶斯平均]
您的评分
  • λ
  • λ
  • λ
状态 可用文档[生成日志]
上次成功报告时间:2016年11月30日[所有3个报告]

hworker自述-0.1.0.1

[返回包描述]

关于

h工作人员是一个Redis支持的至少一次持久队列库。隐约受到启发侧基(sidekiq)对于Ruby。它旨在成为用于处理后台任务的简单可靠机制。工作可以由Haskell应用程序或任何可以将正确形状的JSON数据结构推送到Redis队列中。这个处理作业的应用程序不必与创建它们的应用程序(它们只需要能够与相同的Redis服务器,并使用相同的JSON序列化)。

稳定性

这已经在一个发送电子邮件的应用程序中运行(使用工作人员-)几个月了。这是相对较低的流量(事务消息)大多数情况下,峰值为10k-30k消息(邮件爆炸)。

重要注意事项

工作到期真的很重要。默认为120秒,可能很短,这取决于您的应用程序(对于就像发送电子邮件一样,这可能很好)。此超时的原因是重要的是,如果作业运行时间超过此值,监视器会认为工作失败了以某种无法解释的方式(比如运行作业的服务器死亡),并将作业添加回队列运行。基于此作业处理器的语义,作业正在运行多次不是失败案例,但显然不是什么希望所以一定要设置超时对您的应用程序来说是合理的。

概述

要定义作业,您需要定义作业的序列化表示,以及运行作业的函数,返回状态。的行为未捕获异常是在创建worker时定义的,可以是任何一个失败重试.返回的作业失败已删除从队列中,而返回的作业重试再次添加。这个之间的唯一差异成功和a失败那是一个失败返回已记录的消息(即既不再次运行)。

例子

请参阅例子存储库中的目录。

语义学

此队列处理器的此行为是连续的。

我们依赖Redis的定义行为来实现可靠性。工作一次已经是队列d、 它保证最终运行,前提是存在一些工作线程和监视器线程。如果工作线程运行给定作业失败,作业最终将被重试(如果您不希望出现这种行为,请不要启动任何监视器线程)。一旦作业完成,前提是没有任何东西会杀死干预时间、返回的作业成功将不再运行,返回的作业失败将记录他们的消息,并将不再运行,返回的作业重试将排队再一次。如果在此之前有什么东西杀死了工作线程确认通过后,将重试作业。例外情况在作业内触发不会影响工作线程作业的do在启动时定义(它们可以导致失败重试).

任何与此行为的偏差都被视为将被修复的错误。

Redis操作

在引擎盖下,我们将在redis中具有以下数据结构(名称在创建h工作人员实例):

hworker-作业-名称:json序列化作业描述列表

hworker产品名称:正在进行的作业的哈希,映射到开始时间

h工作-中断-名称:到时间为止无法反序列化的作业的哈希;很可能意味着您更改了序列化格式,而作业仍在队列中,您将不同的应用程序指向同一队列。

hworker失败队列:失败作业的记录(根据配置限制大小)。

在下面的伪代码中,我使用多种...执行委员会表示原子代码块。这些实际上是通过lua和EVAL公司,但我认为这样读比较容易。如果你想看实际发生了什么,只需阅读代码-它不太长!

当工人想要工作时,会发生以下情况:

now=时间多种v=RPOP员工-作业-名称如果vHSET hworker-progress-name v now公司执行委员会

完成作业后,它会执行以下操作:

v=作业HDEL hwork-progress v公司

如果作业返回重试,发生以下情况:

v=作业t=启动时间多种LPUSH工作-作业vHDEL h工作进度t执行委员会

监视器运行在另一个线程上,该线程将重新运行保留在中的作业进展太久(因为这表明发生了未知的事情错误)。它定期运行的操作是:

keys=HKEYS(或HSCAN)hwork-progress对于v键:启动=HGET hwork-progress v如果启动<TIME-超时RPUSH工时作业vHDEL hwork-progress v公司执行委员会

注意监视器的功能和重试略有不同-监视器将作业放在队列的前面,而重试它们在后面。

使用的主库

  • 赫迪斯
  • 伊森

贡献者

生成状态

圆形CI