gpt4 book ai didi

java - 在并行流上传播 Sleuth baggage

转载 作者:行者123 更新时间:2023-12-05 03:26:53 27 4
gpt4 key购买 nike

本题与this one一模一样,实际上没有回答(该代码仅使用一个线程)。我的代码现在看起来像这样

CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> {
foo.stream().parallel()
.forEach(bar -> {
//business logic
}
);
return null;
}, new TraceableExecutorService(this.beanFactory, Executors.newFixedThreadPool(threads), "fooBarStream"));

completableFuture.get();

但只有一个线程被正确跟踪。直接使用 .parallelStream()LazyTraceExecutor 而不是 TraceableExecutorService 没有帮助。

最佳答案

由于 this example 似乎可以正常工作.上面的代码片段变为:

TraceableExecutorService executorService = new TraceableExecutorService(this.beanFactory, Executors.newFixedThreadPool(threads), "fooStream");
CompletableFuture.allOf(runnablesBusinessLogic(foo,executorService)).get();

runnablesBusinessLogic 在哪里

private CompletableFuture<Void>[] runnablesBusinessLogic(List<FooBar> foo, ExecutorService executorService) {
List<CompletableFuture<?>> futures = new ArrayList<>();
for (FooBar f : foo) {
futures.add(CompletableFuture.runAsync(() -> {
businessLogic(f);
return;
}, executorService));
}
return futures.toArray(new CompletableFuture[futures.size()]);
}

如果我正确理解示例(以及文档当前状态背后的 discussion),Sleuth 无法自动使用 ForkJoinPool(以及并行流)。让它工作的主要想法不是创建一个 CompletableFuture 并将其拆分,而是创建多个 futures(并加入它们)。

关于java - 在并行流上传播 Sleuth baggage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71606497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com