直接虚拟机路由中缺少路由 ID



我们发现,当我们在事务中通过 direct-vm 连接 2 个路由时,启用了 MDC 日志记录,在直接 vm 调用后第二个路由返回到第一个路由时,MDC 中的 routeId 丢失(MDC 中的其他所有内容都完好无损(。

我们使用的是 2.24.3 版本,路由在 JAVA DSL 引导中定义,该引导绑定在 springboot 应用程序中。

使用 Camel 源代码进行调试将我们带到 这个类 https://github.com/apache/camel/blob/camel-2.24.3/camel-core/src/main/java/org/apache/camel/impl/MDCUnitOfWork.java 我们可以看到,在第 112 行,这就是删除 routeId 的地方

// not running in route, so clear (should ideally not happen)
MDC.remove(MDC_ROUTE_ID);

但我不完全了解路由上下文如何适应图片,以及如何首先创建路由上下文。 我能找到的关于路由上下文的文档不多,除了它可以用作将路由分组到单独的 XML 文件中并导入到骆驼上下文中的一种方式,这在我们的例子中无关紧要。

任何人都可以提供一些灯光,将不胜感激! 提前谢谢。

随着直接虚拟机调用上的 UOW 完成,CamelInternalProcessor .UnitOfWorkProcessorAdvice.after(Exchange exchange, UnitOfWork uow( 被稱為;

在线 https://github.com/apache/camel/blob/camel-2.24.x/camel-core/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java#L685

UOW 对象中的 routeContextStack 在 https://github.com/apache/camel/blob/camel-2.24.x/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java#L179

然后上线 https://github.com/apache/camel/blob/camel-2.24.x/camel-core/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java#L690 它正在尝试从堆栈中再次获取路由上下文对象 https://github.com/apache/camel/blob/camel-2.24.x/camel-core/src/main/java/org/apache/camel/impl/MDCUnitOfWork.java#L106 当堆栈已清除时,它将始终为空;

因此,路由 ID 从 MDC 中删除为 https://github.com/apache/camel/blob/camel-2.24.x/camel-core/src/main/java/org/apache/camel/impl/MDCUnitOfWork.java#L112

我们在 Camel 2.24.3 上,但此时最新的 Camel 主分支似乎行为相同。

最新更新