前几天,我在重构一些旧代码时,偶然发现了一个WebClient创建。(代码是用Kotlin编写的)
fun String.createClient(responseFilter: ExchangeFilterFunction = ExchangeFilterFunction.ofResponseProcessor { Mono.just(it) }): WebClient =
WebClient
.builder()
.codecs {
it.defaultCodecs().maxInMemorySize(52428800) // 50 Mb
it.defaultCodecs().jackson2JsonEncoder(jackson2JsonEncoder())
it.defaultCodecs().jackson2JsonDecoder(jackson2JsonDecoder())
}
.baseUrl(this)
.filter(responseFilter)
.clientConnector(
ReactorClientHttpConnector(
HttpClient.create()
.tcpConfiguration {
it.bootstrap { b ->
b.setCustomRequestLogging {
b
.group(onClient(DEFAULT_NATIVE))
.channel(EpollSocketChannel::class.java)
}
updateLogSupport(b, CustomLoggingHandler(HttpClient::class.java))
}
}
.apply {
if (this@createClient.startsWith("https://", true))
secure { it.sslContext(SslContextBuilder.forClient().trustManager(INSTANCE).build()) }
}
)
)
.build()
fun <B : AbstractBootstrap<B, C>, C : Channel> AbstractBootstrap<B, C>.setCustomRequestLogging(init: HttpResources.() -> Unit) {
if (System.getProperty("os.name").toLowerCase() == "linux" && config().group() == null)
HttpResources.get().init()
}由于tcpConfiguration和bootstrap都被标记为废弃,所以我想我可以用
HttpClient.create().doOnRequest { _, connection -> connection.addHandlerFirst(CustomLoggingHandler(HttpClient::class.java)) }但我不太清楚这部分是怎么回事
b.setCustomRequestLogging {
b
.group(onClient(DEFAULT_NATIVE))
.channel(EpollSocketChannel::class.java)
}如何使用非推荐api来替换它呢?
发布于 2022-02-10 07:45:38
默认情况下,当您在Linux操作系统上运行时,反应堆Netty将为您配置Epoll传输。不需要自己配置通道类型或EventLoopGroup。对于不推荐的tcpConfiguration,请检查javadoc For HttpClient.html#tcpConfiguration,在这里您可以找到替换的完整文档。
https://stackoverflow.com/questions/70944966
复制相似问题