gpt4 book ai didi

javascript - New Relic 打破了延续本地存储上下文

转载 作者:太空宇宙 更新时间:2023-11-04 00:42:15 25 4
gpt4 key购买 nike

Node.js 中的 New Relic 存在问题。它似乎干扰了我的 continuation-local-storage 实现,我的意思是它似乎正在杀死我的 cls 上下文。

现在,一切都完美运行,我当前的设置没有任何问题。仅当我添加行 require("newrelic"); 时才会出现这种情况按照他们的建议,到 app.js 的顶部会出现问题。

下面是出现问题的特定函数。

function getProfile( req, res, next ) {
var logger = new log_handler( { "script": __filename, "function": getProfile.name } );
var session = cls.getNamespace( 'session' );
var auth = req.headers.authorization.split( " " );

var existingProfile = session.get( "profile" );
if ( typeof existingProfile === "object" && existingProfile.hasOwnProperty( "federatedId" ) ) {
return next( );
}

query_auth0.postTokenInfo( auth[1], function ( err, profile ) {
if ( err ) {
logger.warn( "query_auth0 encountered an error", { error: err.message } );
return next( err );
}

session.set( "profile", profile );
next( err );
} );
}

调用 query_auth0 之前的 session.get("profile") 语句有效,并且确实给我返回了 session 配置文件(如果堆栈中较早的一组)。然而,session.set(“profile”, profile);行给了我错误。

query_auth0.postTokenInfo() 函数调用似乎是中断的地方。这里有几个层,给你一个它的作用的总结可能会更简单:

该函数只是构建对 auth0 的请求,然后通过我们自己的 request_handler 模块发送。这只是建立在第三方“请求”npm 模块之上。 request_handler 与 cls 交互以提取 request_ids,但不设置任何内容。

该问题似乎是在发出请求后发生的(并且成功且没有问题),但是,当我尝试添加返回的配置文件时,出现以下异常:

An Uncaught Exception Occurred!
Error: No context available. ns.run() or ns.bind() must be called first.
at Namespace.set (E:\sitesroot\0\node_modules\continuation-local-storage\context.js:27:11)
at E:\sitesroot\0\shared\middleware\get_profile.js:45:35
at E:\sitesroot\0\shared\query_auth0.js:51:12
at E:\sitesroot\0\shared\request_handler.js:51:12
at E:\sitesroot\0\node_modules\async\lib\async.js:52:16
at Immediate.<anonymous> (E:\sitesroot\0\node_modules\async\lib\async.js:1206:34)
at Immediate.wrapped [as _onImmediate] (E:\sitesroot\0\node_modules\newrelic\lib\transaction\tracer\index.js:155:28)
at processImmediate [as _immediateCallback] (timers.js:383:17)

同样,此错误仅在我使用 newrelic 模块时发生。否则该代码工作正常。此外,当请求完成并回调时似乎会发生此问题。

在 Node.js 中使用 New Relic 时,有没有人遇到过类似的问题,这至少可以为我指明正确的方向?

最佳答案

对于遇到此问题并感兴趣的任何人。

在需要 newrelic 之后,它似乎会以某种方式影响 async 和 continuation-local-storage 出于某种原因交互的方式。在需要 newrelic 之前没有任何问题。

但是,在进一步在线搜索后,我发现了一些与 async 和 cls 问题相关的主题,但是这些问题仅在需要 newrelic 时才会出现。

简而言之,我找到的解决方案是在 app.js 中要求 newrelic 之前先要求 cls。我不确定为什么这解决了问题,但它确实解决了。如果有人对原因有任何其他反馈,我们将不胜感激。

关于javascript - New Relic 打破了延续本地存储上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203202/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com