使用 Node.js 通过堆栈并跨 Thrift 服务边界携带请求上下文

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

我正在尝试找出一种适当的方法来通过我的堆栈携带请求ID(来自restify请求标头的x-request-id);跨 Thrift 服务间调用,以及使用 RabbitMQ 队列消息。目标是在任何地方、任何服务中,我都可以将错误或事件与发起的 http 请求关联起来。是否有使用 Node 执行此操作的已知实践?我想避免在几乎每个函数调用中传递上下文。

我研究了 New Relic 处理检测的方式,有这个博客:https://opbeat.com/blog/posts/how-we-instrument-nodejs/;但是这些类型的检测需要挂钩大量的节点核心库调用,并且对于跨 thrift 调用传递上下文并没有真正的帮助。

如何从请求中获取诸如“x-request-id”之类的 Restify 标头 id,并在堆栈中更深入地访问它(甚至在异步回调中),而无需修改每个函数来传递值?

我也在寻找一种干净的方法来通过所有 thrift 调用传递它(跨服务边界)。

这是使用 TypeScript 和 Node.js 5.x

谢谢!

node.js typescript microservices restify
2个回答
0
投票

是否有使用 Node 执行此操作的已知实践

在 NodeJs 中,您可以

request
移动到任何需要请求上下文内容的地方。

对于每个其他系统,您都需要以该事物的请求系统格式携带这些内容。例如。对于事件存储,我们将其存储在事件元数据中。

为了节俭,我建议将其作为属性添加到每个查询中,并在每个响应中回显。


0
投票
所以我知道有点晚了,但是 ASyncLocalStorage 有一个解决方案。您可以在

此处找到更多信息。 我还没有测试过,但我仍然被所谓的开销吓倒了。

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