如何将信息传递回http处理管道中的上游模块?

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

我正在开发一个基于

go-chi v5
的go服务器应用程序,一个http处理管道是由中间件和一些处理函数构建的,http请求在这个管道中流动,从中间件到处理程序。

问题在于中间件中有些信息是未知的,这些信息只能稍后知道。例如,我有一个仪表中间件,它测量请求处理时间(出口 - 入口),并在请求处理遇到任何错误时记录错误,显然这些信息仅在请求到达业务逻辑模块时才可用,当仪表中间件收到请求后,无法知道处理当前请求需要多长时间,也无法知道当前请求是否会遇到错误。

但是,在golang中,处理http请求时传递信息的唯一方法是使用

context
对象,信息从上游流向下游,我可以使用
requestID
添加像
context.WithValue
这样的信息,因此下游模块可以使用键从
requestID
对象检索
context
,但我无法将信息从下游传递到上游。

似乎我需要一种机制来在http进程管道中设置回调钩子,当请求从堆栈/管道中弹出时,但我找不到这样的机制,有人对此有好的建议吗?谢谢。

go go-chi
1个回答
0
投票

您可能需要查看 OpenTelemetry 来了解此类问题。通常 您尝试收集请求 ID 的事件并稍后将它们关联起来。知道请求何时开始以及何时结束就足够了,不需要立即在中间件中计算一些持续时间。为每个服务请求保留状态并不是很经济。

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