我正在尝试使用新的Spring框架。我找不到这段代码(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并没有发送所有的字节。如果我使用老式的rest模板,一切都没问题
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))
})
}发布于 2018-02-07 22:43:47
如果我对你的问题理解正确,你只需要向前传递流量,这应该是可行的。我在我自己的环境中测试了它,读取所有字节都没有问题。
获取字节数的步骤:
fun foo(): Flux<ByteArray> =
WebClient.create("http://byte-array-service")
.get()
.uri("/info")
.accept(MediaType.APPLICATION_OCTET_STREAM)
.retrieve()
.bodyToFlux(ByteArray::class.java)返回带有响应的字节数:
fun doReadFromByteArrayService(req: ServerRequest): Mono<ServerResponse> =
ServerResponse.ok().body(foo()) https://stackoverflow.com/questions/44514263
复制相似问题