RX Java 2如何跟踪每个事件的总处理时间



我有下面的代码,我想跟踪HttpRequest花了多少时间并记录它。

在顺序代码中,我们通常标记开始、执行和结束,最后(endTime-startTime(

它应该能够打印成功或失败所花费的时间。

io.reactivex.Flowable
.fromIterable(records.records())
.parallel(5)
.flatMap(record -> {
Single<HttpResponse<String>> request = client
.get(xxxxxx, "xxx.xxx.xxx.xxx" , "/xxxxxxx")
.as(BodyCodec.string())
.rxSend();
return request.toFlowable();
}
)
.sequential()
.subscribe(record -> {
System.out.println(record.body());
}, ex -> {
ex.printStackTrace();
});

我就这样成功了。但它不包括例外情况,这是正确的方向吗?

io.reactivex.Flowable
.fromIterable(records.records())
.parallel(5)
.flatMap(record -> {
Single<HttpResponse<String>> request = client
.get(xxxxxx, "xxx.xxx.xxx.xxx" , "xxxxxx")
.as(BodyCodec.string())
.rxSend();
MyWrapper wrapper = new MyWrapper(System.currentTimeMillis(), request);
return Flowable.just(wrapper);
}
)
.sequential()
.subscribe(record -> {
long startTime = record.getStartTime();
record.getHttpResponse().toFlowable().subscribe(t -> {
long endTime = System.currentTimeMillis();
System.out.println("Took: " + (endTime - startTime) + " - " + t.body());
});

}, ex -> {
ex.printStackTrace();
});

感谢

这个技巧做得很好。。。

.flatMap(record -> {
Single<HttpResponse<String>> request = client
.get(xxxxxx, "xxxxxx", "xxxxxx")
.as(BodyCodec.string())
.rxSend();
final long startTime = System.currentTimeMillis();
return request.toFlowable()
.doOnError(ex -> {
long endTime = System.currentTimeMillis();
System.out.println("Took: " + (endTime - startTime));
ex.printStackTrace();
})
.doOnComplete(() -> {
long endTime = System.currentTimeMillis();
System.out.println("Took: " + (endTime - startTime));
});
}
)

最新更新