服务挂钩疑难解答
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
使用本文获取常见问题的一般故障排除指南和解答(常见问题解答)。
查看活动和调试问题
Web 访问管理员中的“服务挂钩”页显示每个订阅的最新活动(过去 14 天),以及订阅是启用、禁用还是受限。
可以访问有关订阅的详细历史记录,包括详细的请求/响应数据,这对于调试有问题的服务或订阅很有用。
若要查看订阅的活动和状态,请转到 “服务挂钩 ”页。
若要查看订阅的详细活动(包括完整请求、响应和事件有效负载数据),请在表中选择订阅,然后选择“ 历史记录”。
订阅失败和缓刑(受限)
失败类型
服务挂钩通知失败分为以下类别:
- 终端故障
- 暂时性故障
- 持久失败
终端故障
唯一的终端失败是 HTTP 状态代码 410(已消失)。 当订阅看到终端故障时,无论其以前的状态如何,它都会自动禁用。
暂时性故障
当订阅看到暂时性故障时,它会尝试重新发送通知最多 8 次,每次尝试之间的延迟增加。 暂时性故障包括以下代码:
- 408(请求超时)
- 502(错误的网关)
- 503(服务不可用)
- 504(网关超时)
暂时性故障的重试序列
重试# | 等待时间 |
---|---|
重试 1 之前 | 等待约 1 秒 |
重试 2 之前 | 等待约 2 秒(总延迟为 3 秒) |
重试 3 之前 | 等待约 4 秒(总延迟 7 秒) |
重试 4 之前 | 等待约 8 秒(总延迟为 15 秒) |
重试 5 之前 | 等待约 16 秒(总延迟 31 秒) |
重试 6 之前 | 等待约 32 秒(总延迟 63 秒) |
重试 7 之前 | 等待约 60 秒(最大退避时间,总延迟为 123 秒) |
重试 8 之前 | 等待约 60 秒(最大退避时间,总延迟为 183 秒) |
如果通知耗尽了所有重试次数,并持续看到每次尝试的暂时性故障,订阅将停止尝试发送通知,并将通知视为持久失败。
持久失败
持久失败包括所有其他 HTTP 故障代码,例如:404(未找到)、500(内部服务器错误),等等。
当订阅看到持久失败时,它将置于缓刑状态。
试用期
在缓刑时,订阅在可以发送的通知数量方面受到限制。 如果订阅继续达到持久失败,则订阅将越来越有限,并最终被禁用。 如果在缓刑时订阅收到成功的响应,则会将其还原到完全启用的状态。
订阅处于缓刑时的最大重试次数序列为 7 个
当订阅处于缓刑中时,任何新事件都将丢失。 重试成功后,将启用订阅,并再次发布事件。
重试# | 等待时间 |
---|---|
重试 1 之前 | 等待约 20 分钟 |
重试 2 之前 | 等待约 40 分钟(总缓刑时间为 1 小时) |
重试 3 之前 | 等待约 1 小时 20 分钟(总缓刑时间为 2.33 小时) |
重试 4 之前 | 等待约 2 小时 40 分钟(总缓刑时间为 5 小时) |
重试 5 之前 | 等待约 5 小时 20 分钟(总缓刑时间为 10.33 小时) |
重试 6 之前 | 等待约 10 小时 40 分钟(总缓刑时间为 21 小时) |
重试 7 之前 | 等待约 15 小时(最大退避时间,总缓刑时间为 36 小时) |
重试七次后,如果通知使用者失败,订阅状态将设置为 DisabledBySystem 。
常见问题
问:服务挂钩的有效负载限制是什么?
答: 有效负载限制为 2 MB。 更大的有效负载会导致性能和可靠性下降。 最佳做法是,服务挂钩应将有效负载限制为 2 MB 或更小。
问:状态已启用(受限)是什么意思?
答: 如果出现过多故障,订阅将受到限制。 启用(受限)与缓刑相同。
问:状态“已禁用”(由于失败)的含义是什么?
答:在长时间 连续失败或遇到终端故障 后,会自动禁用订阅。 在声明失败之前,会多次重试暂时性故障 类型。 不会重试持久失败 类型。 下面是每种故障类型的示例。
- 暂时性:408(请求超时)、502(错误的网关)、503(服务不可用)、504(网关超时)
- 终端:410(消失)
- 持久:非暂时性或终端的所有故障
问:“已禁用”状态(用户左项目)的含义是什么?
答: 创建订阅的用户不再是团队成员。
问:如果服务挂钩不起作用,该怎么办?
答: 检查以下项:
确认订阅已启用
确认订阅设置正确(事件筛选器和操作)
查看历史记录,尤其是在发生故障时
问:是否可以授予常规项目用户查看和管理项目的服务挂钩订阅的能力?
答: 默认情况下,只有项目管理员才拥有这些权限。 若要将这些权限直接授予其他用户,可以使用命令行工具或安全性 REST API。
问:是否可以以编程方式创建订阅?
答: 是的,请使用 REST API。