我正在使用Camel 2.24.1,jaeger-client 0.34,并且具有以下路线:
服务A:
from(“http:....”)
.proces(...)
.to(InOut, “jms:queue:a..”)
.to(“validator:...”)
.process(..)
.end();
服务B:
from(“jms:queue:a...”)
...do some stuff and send response back (synchronously) to a response queue, so that Service A picks this up and continues with processing.
我希望在Jaeger中获得1条跟踪,从服务A开始,跨度为服务B。但是我得到的是两条跟踪。
当我调试代码,尤其是OpenTracingTracer(OTT)类时,看到的内容如下:
在OTT中定义的用于侦听启动和停止的Exchange的路由策略永远不会被调用/到达。这就是为什么当请求到达服务B时,它不会检测到父跟踪并创建新的traceId。
我已将路由策略中的确切逻辑添加到OTT的通告程序事件处理程序中,该事件处理程序侦听ExchangeSending
和ExchangeSent
事件(因此也监听ExchangeStarted
并完成)。现在发生的是,将JMS调用更早地发送到队列,然后ExchangeCompleted
事件完成了。因此导致traceId在发送给服务B的JmsMessage中不存在。
我想问一下我是仅有的一个出现此问题的人,还是真正的错误?有人可以告诉我为什么未触发OTT中定义的路由策略吗?