【发布时间】:2017-06-13 06:51:36
【问题描述】:
我正在尝试将新的 Spring WebFlux 框架与 kotlin 一起使用。而且我找不到这段代码有什么问题(myService):
fun foo(): Flux<ByteArray> {
val client = WebClient.create("http://byte-array-service")
return client
.get()
.uri("/info")
.accept(MediaType.APPLICATION_OCTET_STREAM)
.exchange()
.flatMapMany {
r -> r.bodyToFlux(ByteArray::class.java)
}
}
此方法返回 7893 字节的 Flux,我知道 byte-array-service 发送的不是所有字节。如果我使用老式的休息模板一切都可以
fun foo(): Flux<ByteArray> {
val rt = RestTemplate()
rt.messageConverters.add(
ByteArrayHttpMessageConverter())
val headers = HttpHeaders()
headers.accept = listOf(MediaType.APPLICATION_OCTET_STREAM)
val entity = HttpEntity<String>(headers)
val r = rt.exchange("http://byte-array-service/info", HttpMethod.GET,entity, ByteArray::class.java)
return Flux.just(r.body)
}
它返回从 byte-array-service 发送的所有 274124 个字节
这是我的消费者
fun doReadFromByteArrayService(req: ServerRequest): Mono<ServerResponse> {
return Mono.from(myService
.foo()
.flatMap {
accepted().body(fromObject(it.size))
})
}
【问题讨论】:
-
因此,在您尝试使用 Flux
数据的其他函数中,您只能读取 7893 个字节,是吗? -
您可以尝试改用 Spring 的
DataBuffer类型吗?从中提取字节数组很容易,您可以利用其中的有趣属性(如零拷贝和缓冲池)。 -
@Orest 是的,你是对的
-
@BrianClozel 结果是一样的 =( 只有 7893 字节可用
-
@PavelVarchenko 你能否也发布消费者功能?
标签: spring kotlin project-reactor spring-webflux