需要帮助来理解上述代码示例的 Flat Map 执行
Need help to understand the Flat Map execution for mentioned code sample
我正在尝试通过使用 Flux 和 Webclient 调用休息 api 和累积结果。
我想了解以下代码的 flatMap 运算符的执行。
- list - 包含 50000 个元素。
- restClient - 这是一个 WebClient。
WebClient.builder().baseUrl(url).filter(ExchangeFilterFunctions.basicAuthentication(userId, pwd)).build()
- restClient.getResult - return 单声道。
client.get().uri(uri).retrieve().bodyToMono(returnType)
第一个日志正在将线程名称打印为主线程。元素然后它开始打印 reactor-http-nio-(thread-no)。
第二个日志将线程名称打印为 reactor-http-nio-(thread-no)。
请在这里解释线程执行和切换是如何发生的。
Flux.fromIterable(list)
.log()
.map(e -> e.trim())
.flatMap(e -> restClient.getResult(client, e, String.class))//e is being used to create uri
.log()
.subscribe(e -> result.add(e));
flatMap
有一个 concurrency
参数,默认为 256。
一旦被订阅,它就会从源(fromIterable
)请求 256 个元素并将它们映射到内部发布者(WebClient
调用)。
这是在订阅线程中完成的,这里是 main
线程。
一旦它有 256 个元素 "in flight",flatMap
将在内部完成时根据需要补充,方法是从 iterable 请求一个更多的源元素,然后将其映射到一个新的 WebClient
内.
这是在刚刚结束的inner的线程中完成的,这里是nettyhttp-nio-x
线程
我正在尝试通过使用 Flux 和 Webclient 调用休息 api 和累积结果。 我想了解以下代码的 flatMap 运算符的执行。
- list - 包含 50000 个元素。
- restClient - 这是一个 WebClient。
WebClient.builder().baseUrl(url).filter(ExchangeFilterFunctions.basicAuthentication(userId, pwd)).build()
- restClient.getResult - return 单声道。
client.get().uri(uri).retrieve().bodyToMono(returnType)
第一个日志正在将线程名称打印为主线程。元素然后它开始打印 reactor-http-nio-(thread-no)。 第二个日志将线程名称打印为 reactor-http-nio-(thread-no)。 请在这里解释线程执行和切换是如何发生的。
Flux.fromIterable(list)
.log()
.map(e -> e.trim())
.flatMap(e -> restClient.getResult(client, e, String.class))//e is being used to create uri
.log()
.subscribe(e -> result.add(e));
flatMap
有一个 concurrency
参数,默认为 256。
一旦被订阅,它就会从源(fromIterable
)请求 256 个元素并将它们映射到内部发布者(WebClient
调用)。
这是在订阅线程中完成的,这里是 main
线程。
一旦它有 256 个元素 "in flight",flatMap
将在内部完成时根据需要补充,方法是从 iterable 请求一个更多的源元素,然后将其映射到一个新的 WebClient
内.
这是在刚刚结束的inner的线程中完成的,这里是nettyhttp-nio-x
线程