Quarkus跟踪异步REST客户端调用。在Jaeger的通话层次

时间:2019-12-06 22:49:25

标签: java quarkus jaeger

我有一个代码可以对fetchData函数表示的http端点进行并行调用。

     final Flowable<Data> dataFlowable = Flowable.range(0, requestList.size())
                                                 .concatMapEager(index -> 
                                                               fetchData(requestList.get(index))
                                                              .subscribeOn(Schedulers.io())
                                                              .toFlowable()
);

树调用如下:

enter image description here

只要我拥有同步代码,我曾经Jaqeuer UI中提供的跟踪报告看起来都很不错。当我说好时,我的意思是它是分层结构的,一个跨度跨另一个。

在图中,第一个从资源到ServiceOne到restClient的调用按预期进行了分组,Span (n)一起跟踪。混乱从F.range()时刻开始发生。从上面的代码。之后,每个通话都将变为独立通话-在Jeager ui上显示为Span (1)

但是,当我开始异步调用RestClient时,它并没有真正好的报告-所有消息都散布在Jaqeuer中-我必须将“限制结果”设置为100才能查看所有调用,并且无法利用逻辑层次结构布局。

我设置@Traced并使用这些dep来给您一个主意:

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-smallrye-opentracing</artifactId>
</dependency>

<dependency>
  <groupId>io.quarkus</groupId>
  <artifactId>quarkus-rest-client</artifactId>
</dependency>

quarkus v是1.0。

似乎跨度变得独立,没有父母。

我意识到我使用了.subscribeOn(Schedulers.io()),因此它使用io池中的后台线程来等待每个调用。但是,如何使事情异步。但是。。

问:将如何修复/控制它?

要进行一次通话,将所有其他通话包装在其中:span-parent:span-children

0 个答案:

没有答案