/ वसंत 5 वेबफ्लक्स ढांचे के साथ / डीकोड बाइटएरे - वसंत, कोटलिन, परियोजना-रिएक्टर, वसंत-वेबफ्लक्स

वसंत 5 WebFlux ढांचे के साथ Deode ByteArray - वसंत, कोटलिन, परियोजना रिएक्टर, वसंत-वेबफ्लक्स

मैं कोटलिन के साथ नए स्प्रिंग वेबफ्लक्स ढांचे का उपयोग करने की कोशिश कर रहा हूं। और मुझे नहीं पता कि मैं इस कोड (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)
}
}

यह विधि 78 9 3 बाइट्स के साथ फ्लक्स लौटाती है और मुझे पता है कि बाइट-सरणी-सेवा द्वारा भेजे गए सभी बाइट्स नहीं हैं। अगर मैं पुराने शैली के बाकी टेम्पलेट का उपयोग करता हूं तो सब ठीक है

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)
}

यह बाइट-सरणी-सेवा से भेजे गए सभी 274124 बाइट्स लौटाता है

यहाँ मेरा उपभोक्ता है

fun doReadFromByteArrayService(req: ServerRequest): Mono<ServerResponse> {

return Mono.from(myService
.foo()
.flatMap {
accepted().body(fromObject(it.size))
})
}

उत्तर:

जवाब के लिए 0 № 1

अगर मैं आपके प्रश्न को सही समझ गया, और आपको बस प्रवाह को आगे बढ़ाने की जरूरत है, तो यह काम करना चाहिए। मैंने इसे अपने पर्यावरण पर परीक्षण किया और सभी बाइट्स पढ़ने में कोई समस्या नहीं थी।

बाइट्स प्राप्त करने के लिए:

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())