具有多个服务器和 php 工作人员的 Gearman

2024-03-20

我在多个服务器上运行的 gearman 工作人员遇到了问题,我似乎无法解决。

当工作服务器脱机而不是工作进程被取消时,就会出现此问题,并导致所有其他工作进程出错和失败。

仅 1 个客户和 2 个工作人员的示例 -

Client:

$client = new GearmanClient ();

$client->addServer ('192.168.1.200');
$client->addServer ('192.168.1.201');

$job = $client->do ('generate_tile', serialize ($arrData));

Worker:

$worker = new GearmanWorker ();

$worker->addServer ('192.168.1.200');
$worker->addServer ('192.168.1.201');

$worker->addFunction ('generate_tile', 'generate_tile');

while (1)
{
    if (!$worker->work ())
    {

        switch ($worker->returnCode ())
        {

            default:
                echo "Error: " . $worker->returnCode () . ': ' . $worker->error () . "\n";
                break;

        }

    }
}

function generate_tile ($job) { ... }

工作代码在两台独立的服务器上运行。当每台服务器启动并运行时,两个工作线程都会按预期执行作业。当其中一个工作进程被取消时,另一个工作进程将按预期执行所有作业。

但是,当已取消工作进程的服务器关闭并完全脱机时,对客户端脚本的请求将挂起,并且剩余的工作进程不会获取任何作业。

我从剩余的工作进程中收到以下一组错误:

Error: 46: gearman_con_wait:timeout reached
Error: 46: gearman_con_wait:timeout reached
Error: 4: gearman_con_flush:write:110
Error: 46: gearman_con_wait:timeout reached
Error: 4: gearman_con_flush:write:113
Error: 4: gearman_con_flush:write:113
Error: 4: gearman_con_flush:write:113
....

当我启动另一台服务器而不启动其上的工作进程时,剩余的工作进程会立即启动并执行任何剩余的作业。

对我来说,很明显我需要在工作进程中使用一些代码来处理任何可能离线的服务器,但是我不知道如何做到这一点。

非常感谢,

Andy


我们对多个 gearman 服务器的测试表明,如果列表中的最后一个服务器(在您的情况下为 192.168.1.201)被关闭,工作人员将停止执行您所描述的方式。 (此外,工作人员从最后一个服务器获取作业。仅当 0.201 上没有作业时,它们才会在 0.200 上处理作业)。

这似乎是 gearman 服务器中链表的一个错误,据报道已修复多次,但对于所有可用的 gearman 版本,该错误仍然存​​在。抱歉,我知道这不是解决方案,但我们遇到了同样的问题,但没有找到解决方案。 (如果有人可以为这个问题提供可行的解决方案,我同意给予大额赏金)

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

具有多个服务器和 php 工作人员的 Gearman 的相关文章

  • method_存在于父类php中

    我正在尝试使用 php 函数 method exists 但我需要检查该方法是否存在于对象的父类中 so class Parent public function myFunction class Child extends Parent
  • php 中接口的用途是什么?

    如果我在 PHP 中定义一个接口 以及一个创建该接口实例的工厂类 有什么方法可以强制客户端代码仅使用该接口而不使用底层具体类 根据我的理解 客户也可以实际使用底层类中的任何公共函数 字段 这是一个例子
  • PHP 文件由浏览器下载,而不是由本地开发服务器(MAMP)处理

    一切都很顺利 直到我添加AddHandler application x httpd php5s php到本地服务器文档根目录中的 htaccess 文件 根据我正在使用的站点 我经常更改该文件 因为我访问时这样做了http 本地主机 88
  • PHP if in_array 表示多个值

    我有一个由 3 到 12 个值之间的任意位置生成的数组 它根据帐户信息生成该数组 result ad gt user gt groups user username 我想检查这个数组是否有多个值 大约 4 或 5 个 如果其中有任何一个值
  • 命令运行时从 shell_exec 命令获取输出

    我正在编写一个 PHP 脚本网页 该网页旨在接受先前上传到服务器的 JFFS2 图像的文件名 然后 该脚本将使用映像重新刷新服务器上的分区 并输出结果 我一直在用这个 tmp shell exec update flash v filena
  • 如果所有情况都是真正的 PHP,如何处理这些情况

    我想知道是否有办法继续完成所有三种情况 如果它们都是真的 但是使用break 因为作为一个例子 如果第一种情况是真的 第二种情况是假的 第三种情况也是假的 而且我没有使用break 无论如何它都会进行 将strtotime更改为2014年1
  • 如何在 Yii 中设置 returnUrl 值

    我正在使用 Yii 我遇到的问题是Yii app gt user gt returnUrl 它总是让我回到index php page 由于我不知道用户从哪个页面访问了当前页面 如何将其值设置为请求当前页面的页面 您可以使用Yii app
  • MySQL 连接不工作:2002 没有这样的文件或目录

    我正在尝试设置 WordPress 我已经运行了 Apache 和 MySQL 并且帐户和数据库都已设置 我尝试建立一个简单的连接 我总是得到这个 错误 2002 没有这样的文件或 目录 它正在谈论什么文件或目录 我使用的是 OS X Sn
  • PHP 中两个关联多维数组的值求和

    我正在尝试对两个关联数组的值求和 这是第一个数组 Array Jan 01 2013 gt Array COM gt 100 RES gt 200 Oct 28 2014 gt Array COM gt 300 RES gt 400 这是第
  • 在 while 循环之外使用变量(作用域)

    关于 PHP 范围的小问题 我似乎无法在 while 循环之外调用变量 report 我尝试过各种事情 包括return 这不起作用 这里唯一起作用的两个函数是如果我echo变量 report在循环内 或者如果我print它 我不想这样做
  • 某些表格后的分页符

    我的问题是 我有一个页面 其中包含几个要打印的 html 表格 有些表有很多行 有些则没有 我想要做的是将第一个和第二个表 大表 打印在单独的页面中 其余表 小表 每页打印两个 如何在我想要的位置放置分页符 我试过 但这会在每个表格后面添加
  • Laravel 6:尚未设置外观根

    经过一段时间的努力 我已将我的网站从 Laravel 5 8 迁移到 Laravel 6作曲家更新我在网站上遇到此错误 并且仅使用命令PHP工匠 PHP Fatal error Uncaught RuntimeException A fac
  • 从本地 html/javascript 网站插入 mySQL 数据库

    我正在尝试做什么 我的程序的目的是插入数据local HTML JS网站变成online 非本地 mySQL数据库 到目前为止我尝试过的 我试图用来实现此目的的原始方法是让我的本地网站使用 javascript 通过在线发布数据PHP文件
  • PHP 中的多行字符串文字

    考虑 xml l xml vv echo xml 这将回响vv 为什么以及如何为诸如此类的事情执行多行字符串文字简单XML https en wikipedia org wiki SimpleXML etc Well xml l vv Wo
  • 在 foreach 循环中使用函数会缓存结果,还是每次都调用该函数?

    在下面的代码中 function a echo a return array 1 2 3 4 foreach a as t echo t 我们可以看到 a 仅被调用一次 并且返回值似乎被缓存了 但后来我看到这场辩论 参见对该问题的评论 ht
  • 使用mysql数据按高低价格排序

    这是我所拥有的以及我想做的 我的 MySql 数据库中有 12 个项目 4 个产品为 4 99 4 个产品为 3 99 4 个产品为 2 99 我意识到我可以像这样查询数据库 它会给我一个该价格的产品列表
  • 向 yahoo 和 hotmail 用户发送电子邮件?

    我正在使用 php 和 mysql 每次用户在我的网站上注册时 我都会使用 php mail 发送一封电子邮件进行身份验证 最近我发现 很多Yahoo和Hotmail用户还没有激活他们的帐户 假设 1000 个用户中 只有 200 个被激活
  • 根据产品属性在 Magento 中创建购物车规则

    我在一个类别中有产品 针 有些以 100 支为一包出售 有些以 500 支为一包出售 盒子中的针数被设置为产品属性 我想根据购物车中的针总数应用购物车规则 F x 如果您购买 1000 2000 根针头 无论 500 100 包的组合如何
  • Symfony2 dev环境可以工作,prod环境给出404错误

    我最近在我的机器上成功安装了 Symfony2 我可以访问http localhost app dev php 开发环境 但是 当我尝试访问 prod 环境时 http localhost app php 我在浏览器中收到以下错误消息 哎呀
  • 如何使用 PHP 从 iframe 获取 url

    如何从下面的链接获取 YouTube 网址 您可以使用 regex 和 preg match 函数 preg match src iframe string match url match 1 UPDATE如果您有使用 php 生成的页面或

随机推荐

  • 获取创建的表名

    我正在尝试创建一个event trigger 每当表已创建 当发生这种情况时 我想插入到一个表中 该表有 2 列id and tablename 创建的表的名称 阅读文档我无法找到如何获取表名 到目前为止我有这个 CREATE OR REP
  • 使用facet_grid将“标题”添加到我的因素中

    我想使用 ggplot2 为我的因素添加文本 标题 例如 对于来自 reshape2 库的数据 library reshape2 library ggplot2 ggplot tips aes x total bill y tip tota
  • 如何将Java时间戳转换为ms access Date?

    我想将 java 时间戳插入到 msaccess 数据库中 但收到下面列出的错误 ms access 字段已设置为 DATE 数据类型 任何建议将不胜感激 谢谢 这是我的 DAO 类方法 public void addSale String
  • 将用户定义的表传递给存储过程

    我有一个用户定义表 我正在将其从存储过程中传递到存储过程中 DECLARE tmpInput MyTableType Table is populated from an INPUT XML exec ValidateInputXML SE
  • 向下滚动时标题会发生变化(jQuery)

    TechCrunch 最近重新设计了他们的网站 他们有一个可爱的标题 当你向下滚动时 它会缩小为更薄的品牌版本 你可以在这里明白我的意思 http techcrunch com http techcrunch com 我将如何创建这样的东西
  • 如何将原始二进制数据转换为 blob 并将其显示在 img 标记中?

    我正在 Electron 和 Svelte 中制作梦想日记应用程序 我有一种自定义文件格式 其中包含标题 描述和一张或多张图像 看 程序输入 文件输出 当我需要的时候 我可以打电话ipcRenderer invoke 在主进程中读取文件 然
  • 通过 REST API Java 从 URL 获取 ObjectID

    我尝试将讨论添加到用户故事中 部分代码 QueryResponse storyQueryResponse restApi query storyRequest JsonObject storyJsonObject storyQueryRes
  • 如何在 matplotlib 等高线图中设置虚线长度

    我正在 matplotlib 中制作一些等高线图 但破折号的长度太长 虚线也不好看 我想手动设置破折号的长度 当我使用 plt plot 制作简单的绘图时 我可以设置精确的破折号长度 但是我无法弄清楚如何使用等高线图做同样的事情 我认为以下
  • 如何处理 Google Play 中的待处理购买

    我们的大多数购买在 3 天 30 分钟后不断被取消 我认为这是待购买状态的结果 然而 关于如何准确处理待处理购买的文档却很少 而且 由于某种原因 即使我自己是测试人员 我也无法测试它 因为购买方式上没有 慢卡 选项 此外 我们没有后端服务器
  • C# 将行添加到具有自动增量列的数据表

    我有一个数据表 其中包含 A B C 列 我已将 A 列的 is Identity 属性设置为 true 但现在无法向表中添加任何行 我正在尝试的代码是这样的 dsA dtA row dsA dtA NewdtARow row B 1 ro
  • JavaScript 超时 - 规范 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 这不仅仅是一个问题 它是一个确保Ja
  • 为什么 git revert 会抱怨缺少 -m 选项?

    所以我正在和其他人一起开发一个项目 并且有多个 github 分支正在开发中 有人刚刚修复了一个问题 我与他的分支合并 但后来我意识到我可以找到更好的解决方案 我想恢复我刚刚所做的提交 我尝试这样做git revert HEAD但它给了我这
  • 如何使用 refs/remotes 中的所有分支和标签克隆 git 存储库?

    我有一个从 svn 存储库创建的本地 git 存储库 git svn clone s svn 然后我创建了一个备份遥控器并将所有内容推送到其中 git remote add backup git myhost mybackup git gi
  • 子进程输出到 stdout 和 PIPE

    我正在使用subprocess像这样的模块 ping subprocess Popen fping exe 192 168 2 3 196 65 58 69 stdout PIPE output ping stdout readlines
  • AspectJ 的 NoSuchMethodError

    注意 这是概念实现的证明 而不是最终的事情 我有第三个 派对附加组件 我想限制他们对声音的使用 例如限制持续时间等 安全管理器不可能实现 为了实现这一点 我考虑用包装器替换 AudioSystem getLine 的返回值 这是测试方面 A
  • 如何使用 python 从 JSON 中提取特定字段和值?

    我正在迭代 JSON 我想从此对象中提取以下字段 Id 开放日期 User 票证状态 结束日期 我的数据结构如下 filtered data id 1021972 Aging Deferred Transferred Aging Open
  • MongoDB 全文搜索

    创建索引 db MyCollection createIndex text name FullTextIndex 搜索匹配项 db MyCollection find text search myWord count 结果为 1 对于具有值
  • 接口从类加载器中不可见

    我是新玩的 框架并使用 wsdl2java 工具 我正在开发一部戏 需要与 SOAP Web 服务交互的应用程序 我有 WSDL 并使用 jaxws 从它创建对象 它创建了一堆 java 类和 1 个接口 当我尝试进行 Web 服务调用时
  • 如何让R8 + proguard-android-optimize.txt + Google Drive API 无缝工作?

    这是我们的R8版本 当前版本是 1 4 94 来自 go r8bot luci r8 ci archive 0 5g74 的内部版本 390954928f0db9c3b888a367f7f128ce3bbfb160 当我从 buildTyp
  • 具有多个服务器和 php 工作人员的 Gearman

    我在多个服务器上运行的 gearman 工作人员遇到了问题 我似乎无法解决 当工作服务器脱机而不是工作进程被取消时 就会出现此问题 并导致所有其他工作进程出错和失败 仅 1 个客户和 2 个工作人员的示例 Client client new