Gearman 应该已经处理好了。只要您有一些工人专门处理具有不可靠依赖关系的工作而不处理其他工作,以及一些工作人员要么完成所有工作,要么只完成没有不可靠依赖关系的工作。
您需要做的就是为不可靠的依赖工作者添加一些代码,以便他们只接受检查依赖服务是否正在运行的工作,如果服务关闭,那么让他们稍等一下并重新测试服务(并继续ad infinitum),一旦服务启动,然后让他们加入 gearmand 服务器,做工作,返回工作,重新测试服务等。
当依赖服务关闭时,不处理需要该服务的作业的工作人员将继续在作业队列中寻找其他作业。如果有可用于处理其他工作类型的工作人员,Gearmand 不会在一种工作类型上阻止整个工作队列(或工作人员)。
关键是要明智地定义你的工作类型和工人。
编辑 -
啊哈,我知道我的想法有点出格,(大约一年前我写了我的齿轮系统,从那以后就没有真正接触过它)。我对此类问题的解决方案是,一旦检测到依赖服务发生故障,让所有通常处理依赖作业的工作人员向 gearmand 服务器取消注册其依赖作业处理能力。(并且当前正在尝试完成该工作的任何工作人员都应该返回失败。)一旦服务备份 - 让这些工作人员重新注册他们处理该工作的能力。请注意,这确实需要另一个通信渠道来通知工作人员相关服务的状态。
希望这可以帮助