如何在负责生成相关 ID (X-Correlation-ID) 的应用程序中存储它

问题描述 投票:0回答:2

我正在我的应用程序中实现一个相关 ID,并希望获得一些有关其设计的反馈。主要关注的是相关 ID 应可用于所有日志。

假设我有一个网络(前端)应用程序,它为我的用户提供页面。它与两个提供数据的 API 进行对话。 API 不会向用户公开,因此所有请求都在前端应用程序中“开始”。

API 的工作很简单,它们使用前端应用程序的所有标头中提供的相关 ID (X-Correlation-ID) 并将其打印在任何日志中。

前端应用程序必须生成 ID,将其添加到传出请求的标头中,但它也必须消耗 ID。

我的问题是:前端应用如何存储关联ID? 我的第一个想法是,它会修改传入的请求并添加标头(如果它不存在),但这将使传入的请求有些“不可靠”,因为它现在已被修改。 另一个想法是,它可能存储为某种应用程序全局变量,根据请求清除。

request http-headers soa
2个回答
4
投票

相关 id,即通常附加到请求头的 id,例如 Request-ID、X-Request-ID、X-Trace-ID、X-Correlation-ID 通常每个请求发布

您似乎想将其存储在客户端本地。你所描述的听起来更像是一个“会话ID”,当客户端“重新启动”时会被重置。如果是这种情况,您可以简单地使用本地/会话存储或 cookie 来存储并在需要时清除它。

请记住上面的第一句话。相关 ID 通常在每个请求中使用。我通常做的事情:

  1. 在每个请求的客户端上生成一个 id
  2. 通过上述标头之一将其传递给 API
  3. 无论谁先收到请求(某些 API 网关、HA 代理等),都会检查标头是否存在,并将其代理到下游。任何调用其他服务的服务也是如此。这通常作为服务或工具提供给大多数服务/团队,以便他们不会忘记这样做。
  4. 利润?
例如,

这就是 heroku 所做的事情。对于许多其他服务/公司来说也是如此。

不用说,您可以将两个 ID、您引用的“会话”ID 加上每个请求生成的 ID 结合起来,以便更好地了解日志等中发生的情况。


1
投票
根据我的设计,我建议始终在后端的第一个接触点(负载均衡器/网关/控制器)检查(使用后端的中间件/过滤器拦截)来自客户端的每个请求,并检查 Trace-请求标头中的 ID/Correlation-ID,如果存在,则按原样转发请求,如果不存在(因为这是来自该新客户端的第一次调用),则生成随机 ID(作为 Trace-ID)并附加该 ID新生成的随机ID

请求标头并在应用程序中重新路由/传递请求。 还有一件事,在发回响应时,请确保再次将之前生成的 ID 添加到 Response Header 中,以便客户端可以接收到这个唯一的 ID 并将其保存在 localstorage/cookie 中以供进一步调用,以便使用该跟踪 ID 可以轻松跟踪客户端。

正如您请求的日志一样,现在既然您有了相关 ID/跟踪 ID,您就可以将它们记录在您想要的任何地方,并且您可以轻松确定客户端请求的完整流程,以防使用此唯一 ID 出现任何问题。

步骤:

    检查请求标头中的相关 ID(在后端)
  1. 如果已经存在,则允许请求传递到所需的服务。 如果不存在,则生成唯一的随机 ID 并在请求标头中添加自定义标头。
  2. 再次,在发送响应之前,再次将此自定义标头添加到客户端的响应标头中。
我希望能解答您的疑问。

© www.soinside.com 2019 - 2024. All rights reserved.