为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
绝地无双 2022-07-22 10:43:40
我想在 PHP (Guzzle) 中实现重试模式以确定在失败的情况下是否需要再次发送请求。如果需要,我是否应该在再次发送之前使用一些延迟。注意:这是内部服务通信,每个服务都在扩展组中并在负载均衡器后面,所以我们假设目标 URL 是现有 URL,但可能由于某种原因不可用,所有服务器也是 NGINX是否有任何最佳实践是否执行重试以及是否延迟?据我所知,状态503意味着服务器超载,所以在这种情况下,小延迟可能有助于等待新实例启动并帮助分配负载???出现错误怎么办502/504,还要延迟重试???遇到错误怎么办500??在我的理解500中,当服务器或一般逻辑出现问题并且我们不需要执行任何重试时应该抛出???怎么样400,就像我们得到了一样的动作500??怎么样404??可以有两种类型404,一种是端点确实不存在(我认为在内部服务之间进行通信的情况下这是不可能的),另一种是未找到请求的资源(例如,未通过凭据找到用户)。我认为如果404我们不需要执行重试422我在某些域错误或验证错误的情况下使用,但也许服务器可以在其他情况下返回它?如果它只是由我触发的,我可以假设不需要重试。其他状态代码呢,还有 NGINX 特定代码???我知道我可能需要为每个 URI 案例制定特定的重试策略,但我相信有一些通用/可重用的规则。
查看完整描述

1 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

我最终得到了这样的列表:

  • 400 错误请求 - 不重试

  • 401 未授权 - 无 RETRY

  • 402 需要付款 - 无需重试

  • 403 禁止 - 不重试

  • 404 未找到 - 正如我之前所说的,我假设我们有不同的 404,如果未找到某些资源,例如 DB 中的用户,如果在 URL 确实错误的情况下未找到 404 页面,并且未找到 bz 平衡问题。因此,如果找不到某些资源,我们将发送一些自定义数据,在这种情况下不重试,在其他情况下,我们将重试

  • 405 方法不允许 - 不重试

  • 406 不可接受 - 不重试

  • 需要 407 代理身份验证 - 无需重试

  • 408 请求超时 -重试

  • 409 冲突 -重试

  • 410 消失 - 不重试

  • 411 长度要求 - 不重试

  • 412 前提条件失败 - 没有重试

  • 413 有效负载太大 - 不重试

  • 414 URI 太长 - 没有重试

  • 415 不支持的媒体类型 - 没有重试

  • 416 Range Not Satisfiable - no RETRY

  • 417 期望失败 - 没有重试

  • 421 错误的请求 - 没有重试

  • 422 无法处理的实体 - 没有重试

  • 423 Locked -如果指定的锁定时间和时间不太长,则重试

  • 424 失败的依赖 - 没有重试

  • 426 需要升级 - 无需重试

  • 428 需要先决条件 - 无 RETRY

  • 429 Too Many Requests - 可能重试RETRY

  • 431 请求标头字段太大 - 没有重试

  • 451 由于法律原因不可用 - 不重试

因此,不应重试 4** 客户端错误中的大多数。

不应重试的 5** 服务器错误:

  • 500 Internal Server Error - no RETRY,在大多数情况下它没有捕获应用程序错误,所以我们不应该重试它

  • 501 未实施 - 没有重试

  • 502 错误网关 -重试

  • 503 服务不可用 -重试

  • 504 网关超时重试

  • 505 HTTP 版本不支持 - 不重试

  • 506 Variant Also Negotiates - 不重试

  • 507 存储空间不足 - 不重试

  • 508 检测到循环 - 没有重试

  • 510 未扩展 - 不重试

  • 511 需要网络身份验证 - 无需重试

这将采用基本重试策略,但正如我所说的,每个请求都应该单独处理,所以大多数请求都会有自己的策略,覆盖一些代码处理并使用不同的重试时间。


查看完整回答
反对 回复 2022-07-22
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号