我有一个代码可以对fetchData
函数表示的http端点进行并行调用。
final Flowable<Data> dataFlowable = Flowable.range(0, requestList.size())
.concatMapEager(index ->
fetchData(requestList.get(index))
.subscribeOn(Schedulers.io())
.toFlowable()
);
树调用如下:
只要我拥有同步代码,我曾经在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