为服务器发送的事件配置 API
本文提供有关在 API Management 中配置可实现服务器发送的事件 (SSE) 的 API 的指南。 SSE 基于 HTML5 EventSource
标准,用于在客户端建立连接后通过 HTTP 自动将数据流式传输(推送)到客户端。
提示
API Management 还为 WebSocket API 提供本机支持,该 API 在客户端和服务器之间保持一个单一持久的双向连接。
先决条件
- 现有的 API 管理实例。 如果还没有实例,请创建一个。
- 用于实现 SSE 的 API。 使用支持的导入方法之一将 API 导入并发布到 API Management 实例。
SSE 指南
当使用 API Management 来访问实现 SSE 的后端 API 时,请遵循以下准则。
选择长时间运行的 HTTP 连接的服务层级 - SSE 依赖于长时间运行的 HTTP 连接,某些 API 管理定价层支持这种连接。 经典和 v2 API 管理层支持长时间运行的连接,但消耗层不支持。
使空闲连接保持活动状态 - 如果客户端和后端之间的连接可能空闲 4 分钟或更长时间,请实现使连接保持活动状态的机制。 例如,在连接的后端启用 TCP keepalive 信号,或者至少每 4 分钟从客户端发送一次流量。
此配置需要覆盖 Azure 负载均衡器强制执行的 4 分钟的空闲会话超时时间,该均衡器用于 API Management 基础架构。
立即将事件中继到客户端 - 关闭
forward-request
策略上的响应缓冲,以便事件能立即转发到客户端。 例如:<forward-request timeout="120" fail-on-error-status-code="true" buffer-response="false"/>
避免使用其他可缓冲响应的策略 - 某些策略(如
validate-content
)也可以缓冲响应内容,不应与实现 SSE 的 API 一起使用。避免记录 Azure Monitor、Application Insights 和事件中心的请求/响应正文 - 可以使用诊断设置为 Azure Monitor 或 Application Insights 配置 API 请求日志记录。 借助该诊断设置,可以在请求执行的各个阶段记录请求/响应正文。 对于实现 SSE 的 API,这可能会导致意外缓冲,从而导致问题发生。 在全局/所有 API 范围内配置的 Azure Monitor 和 Application Insights 的诊断设置适用于服务中的所有 API。 可以根据需要替代单个 API 的设置。 登录到事件中心时,可以使用 log-to-eventhubs为请求/响应日志记录配置上下文信息的范围和数量。 对于实现 SSE 的 API,请确保已禁用 Azure Monitor、Application Insights 和事件中心的请求/响应正文日志记录。
禁用响应缓存 - 为了确保及时通知客户端,请确认未启用响应缓存。 有关详细信息,请参阅 API Management 缓冲策略。
在负载下测试 API - 在投入生产之前,遵循常规做法在负载下测试 API,以检测性能或配置问题。