这是我最终解决的方法-</p>
我使用了 CLS,它允许我们跟踪动态范围。
阅读有关 CLS 的所有文本需要一段时间,所以这里是我所做的总结(外行术语)
注意 - 我正在使用具有“严格”模式的 NodeJ。这意味着我不能使用动态范围。鉴于其生产系统,我想保持严格模式。因此,另一种方式来实现动态范围。
1) CLS 创建一个动态上下文/范围。这使我们可以设置/获取仅在我们处于创建范围内之前可见的键值对。
2) 由于我使用的是 Bluebird 的 Promises,CLS 要求我使用补丁来保持 Promises 中的上下文/范围可用。
https://www.npmjs.com/package/cls-bluebird
3) 将 CLS 与 Promises 一起使用需要时间来弄清楚。这是关于不同图书馆如何使用 CLS 产生不同结果的精彩讨论。
https://github.com/TimBeyer/cls-bluebird/issues/6
4) 这就是我使用 CLS 的方式(释义和简化)–</p>
var cls = require('continuation-local-storage');
var clsbluebird = require('cls-bluebird');
var namespace = cls.createNamespace('ns');
clsbluebird( namespace );
var result;
namespace.run(function() {
namespace.set('key', 'value');
result = abc(); // returns 'value'
});
// versus doing –
result = abc(); // returns undefined
function abc() {
return namespace.get('key');
}
5) 用例——通过这种方式,我实现了交易的基本跟踪。例如。NewRelic、Trace 等