【发布时间】:2021-05-09 13:24:04
【问题描述】:
我正在将 Thorntail (2.4.0.Final) 迁移到 Quarkus (1.11.1.Final)。 在测试阶段,我们注意到分布式跟踪不起作用。 跟踪工作(单个组件跟踪),但 uber-trace-id 没有与休息请求标头一起传递,因此下一个微服务(休息请求的接收者)正在从零开始生成跟踪,没有跨度信息。
在 Thorntail 中,它只是通过 ClientBuilder 上的配置完成
import org.eclipse.microprofile.opentracing.ClientTracingRegistrar;
import javax.ws.rs.client.ClientBuilder;
...
ClientBuilder clientBuilder = ClientBuilder.newBuilder();
...
ClientTracingRegistrar.configure(clientBuilder);
比较两者,我注意到 Thorntail 有 ClientTracingRegistrarProvider 可用
public class ResteasyClientTracingRegistrarProvider implements ClientTracingRegistrarProvider {
public ResteasyClientTracingRegistrarProvider() {
}
public ClientBuilder configure(ClientBuilder clientBuilder) {
return this.configure(clientBuilder, Executors.newFixedThreadPool(10));
}
public ClientBuilder configure(ClientBuilder clientBuilder, ExecutorService executorService) {
ResteasyClientBuilder resteasyClientBuilder = (ResteasyClientBuilder)clientBuilder;
Tracer tracer = (Tracer)CDI.current().select(Tracer.class, new Annotation[0]).get();
return (ClientBuilder)resteasyClientBuilder.executorService(new TracedExecutorService(executorService, tracer)).register((new Builder(tracer)).withTraceSerialization(false).build());
}
}
所有与wildfly相关的配置,如文件 META-INF/services/org.eclipse.microprofile.opentracing.ClientTracingRegistrarProvider 提供者路径 org.wildfly.swarm.mpopentracing.deployment.ResteasyClientTracingRegistrarProvider
在 Quarkus 中,我们以相同的方式构建 rest 客户端,但没有这样的提供程序。 有人知道我们需要更改哪些内容才能拥有此分布式跟踪功能吗?
附加信息: 我们正在使用 jaxrs API (javax.ws.rs) 构建休息客户端 并构建具有依赖项的应用程序:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-smallrye-opentracing</artifactId>
</dependency>
提前感谢所有建议和帮助。
【问题讨论】:
-
如果我理解正确,你的意思是当使用 Rest Client 时,跟踪标头不会从你的 rest 端点传播到由 rest 客户端进行的调用?您可以尝试使用 ClientHeadersFactory,请参阅 quarkus.io/guides/rest-client#custom-headers-support
-
是的,你正确理解了这个问题,是的,我们已经在标题中手动放置了 uber-trace-id 作为解决方法,但没有 ClientHeadersFactory
标签: trace quarkus opentracing microprofile smallrye