gearman 中的错误情况和重试?

2023-12-23

有人可以指导我 gearman 在出现异常时如何重试吗 抛出或发生错误时?

我在 Django 应用程序中使用 python gearman 客户端,我的工作人员是 作为 Django 命令启动。我从中读到博客文章 http://www.hermanradtke.com/blog/retrying-failed-gearman-jobs/重试 从错误条件来看并不简单,它需要 sys.exit 从工作端。

是否已修复此问题以使用 sendFail 或 sendException 重试? gearman 还支持使用指数算法重试 – 比如说 SMTP 失败是否会在 2、4、8、16 秒等后重试?


据我了解,Gearman 采用了一种非常“这不关我的事”的方法 - 例如,它不会干预正在执行的工作,除非工人崩溃。任何成功/失败消息都应该由客户端处理,而不是 Gearman 服务器本身。

在前台工作中,这意味着所有sendFail() / sendException()和别的send*()定向到客户端,由客户端决定是否重试该作业。这是有道理的,因为有时您可能不需要重试。

在后台作业中,所有send*()函数失去了意义,因为没有客户端会监听回调。结果,发送的消息将被 Gearman 忽略。重试作业的唯一条件是工作线程崩溃时(可以用exit(XX)命令,在哪里XX是一个非零值)。当然,这不是您想要做的事情,因为工作线程通常应该是长时间运行的进程,而不是在每个不成功的作业后都必须重新启动的进程。

就我个人而言,我通过扩展默认的 GearmanJob 类解决了这个问题,我在其中拦截对send*()函数,然后自己实现重试机制。本质上,我将所有与重试相关的数据(最大重试次数、已重试次数)与工作负载一起传递,然后自己处理所有事情。这有点麻烦,但我理解为什么 Gearman 以这种方式工作 - 它只是允许您处理所有应用程序逻辑。

最后,关于以指数超时(或与此相关的任何超时)重试作业的能力。 Gearman 有一个功能可以添加延迟的作业(寻找SUBMIT_JOB_EPOCH in the 协议文档 http://gearman.org/index.php?id=protocol),但我不确定它的状态 - PHP 扩展和我认为 Python 模块不支持它,并且文档说它可以在将来删除。但我知道它目前有效 - 您只需向 Gearman 提交原始套接字请求即可实现(指数部分也应该在您这边实现)。

然而,这篇博文 http://code.recollect.com/post/12792504787/queue-within-a-queue认为 SUBMIT_JOB_EPOCH 实现不能很好地扩展。他使用node.js 和setTimeout()为了让它工作,我见过其他人使用 unix 实用程序at做同样的事情。无论如何 - Gearman 不会为你做这件事。它将关注可靠性,但会让您专注于所有逻辑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gearman 中的错误情况和重试? 的相关文章

  • 更改 SQL Server 2005 中数据库图表的所有者

    我需要更改 SQL Server 2005 中数据库图表的所有者 目前它归我所有 domain username diagramName 我想将其更改为 dbo dbo diagramName 所有 我以为我可以使用 sp changeob
  • 如何从 php 脚本设置 cron 作业?

    我是 cron 工作的新手 我研究了一些有关 cron 作业的基础知识 我可以使用 cron 选项卡调用 php 通过在 etc crontab 中使用以下命令 10 root usr bin php var www PATH TO SCR
  • d3.js:将匿名函数作为参数传递给居中力?

    我正在制作一个交互式气泡图 并且正在研究将数据分为两组并移动到屏幕两侧的功能 我在模拟中使用了居中力 因为我认为它比使用forceX 和forceY 能提供更好 更一致的数据显示 但是 我在分割数据时遇到了麻烦 我的想法是 由于您可以将匿名
  • 背景颜色项目组合框 WPF

    我正在做一个 WPF 并有一个组合框 其中包含计算机上可用端口的列表 我想改变这些物品的颜色 我的组合框是这些
  • Grails - 仅供对象所有者访问

    我仍在开发我的第一个 Grails 应用程序 这次 我的问题是限制特定用户对某些操作的访问 假设用户添加一些对象 例如图书 我想仅向管理员和添加书籍的用户授予编辑书籍的权限 我目前正在使用 Acegi 插件 我知道该插件有更新版本 但我不确
  • 如何在 Swift 中编写多行字符串?

    如何将字符串拆分为多行 如下所示 var text String This is some text over multiple lines Swift 4 支持多行字符串文字 https github com apple swift ev

随机推荐