重试模式,如何确定 PHP 中的失败类型

我想在 PHP (Guzzle) 中实现重试模式以确定在失败的情况下是否需要再次发送请求。如果需要,我是否应该在再次发送之前使用一些延迟。注意:这是内部服务通信,每个服务都在扩展组中并在负载均衡器后面,所以我们假设目标 URL 是现有 URL,但可能由于某种原因不可用,所有服务器也是 NGINX


是否有任何最佳实践是否执行重试以及是否延迟?


据我所知,状态503意味着服务器超载,所以在这种情况下,小延迟可能有助于等待新实例启动并帮助分配负载???


出现错误怎么办502/504,还要延迟重试???


遇到错误怎么办500??在我的理解500中,当服务器或一般逻辑出现问题并且我们不需要执行任何重试时应该抛出???


怎么样400,就像我们得到了一样的动作500??


怎么样404??可以有两种类型404,一种是端点确实不存在(我认为在内部服务之间进行通信的情况下这是不可能的),另一种是未找到请求的资源(例如,未通过凭据找到用户)。我认为如果404我们不需要执行重试


422我在某些域错误或验证错误的情况下使用,但也许服务器可以在其他情况下返回它?如果它只是由我触发的,我可以假设不需要重试。


其他状态代码呢,还有 NGINX 特定代码???


我知道我可能需要为每个 URI 案例制定特定的重试策略,但我相信有一些通用/可重用的规则。


绝地无双
浏览 147回答 1
1回答

一只名叫tom的猫

我最终得到了这样的列表:400 错误请求 - 不重试401 未授权 - 无 RETRY402 需要付款 - 无需重试403 禁止 - 不重试404 未找到 - 正如我之前所说的,我假设我们有不同的 404,如果未找到某些资源,例如 DB 中的用户,如果在 URL 确实错误的情况下未找到 404 页面,并且未找到 bz 平衡问题。因此,如果找不到某些资源,我们将发送一些自定义数据,在这种情况下不重试,在其他情况下,我们将重试405 方法不允许 - 不重试406 不可接受 - 不重试需要 407 代理身份验证 - 无需重试408 请求超时 -重试409 冲突 -重试410 消失 - 不重试411 长度要求 - 不重试412 前提条件失败 - 没有重试413 有效负载太大 - 不重试414 URI 太长 - 没有重试415 不支持的媒体类型 - 没有重试416 Range Not Satisfiable - no RETRY417 期望失败 - 没有重试421 错误的请求 - 没有重试422 无法处理的实体 - 没有重试423 Locked -如果指定的锁定时间和时间不太长,则重试424 失败的依赖 - 没有重试426 需要升级 - 无需重试428 需要先决条件 - 无 RETRY429 Too Many Requests - 可能重试RETRY431 请求标头字段太大 - 没有重试451 由于法律原因不可用 - 不重试因此,不应重试 4** 客户端错误中的大多数。不应重试的 5** 服务器错误:500 Internal Server Error - no RETRY,在大多数情况下它没有捕获应用程序错误,所以我们不应该重试它501 未实施 - 没有重试502 错误网关 -重试503 服务不可用 -重试504 网关超时重试505 HTTP 版本不支持 - 不重试506 Variant Also Negotiates - 不重试507 存储空间不足 - 不重试508 检测到循环 - 没有重试510 未扩展 - 不重试511 需要网络身份验证 - 无需重试这将采用基本重试策略,但正如我所说的,每个请求都应该单独处理,所以大多数请求都会有自己的策略,覆盖一些代码处理并使用不同的重试时间。
打开App,查看更多内容
随时随地看视频慕课网APP