Как отправить сообщение и получить сообщение
Способ
Mono<ByteBuf> send(ByteBuf buf){
// how to send the buf then receive a msg
}
Я пытаюсь реализовать этот метод, отправив сообщение с исходящего соединения и получив сообщение с входящего, а затем вернув сообщение Моно. Но я могу получить сообщение только в методе (Publisher). Кажется, он не может вернуться к данным Mono
Я пробовал это.
// the connecttion has been initialized before entering this method.
Mono.just(buf)
.doOnNext(data -> connection.outbound().sendObject(data).then().subscribe())
.then(connection
.inbound()
.receiveObject()
.single()
.map(RpcDataPackage.class::cast)
.map(RpcDataPackage::getData)
.map(data -> {
try {
return resCodec.decode(data);
} catch (IOException e) {
throw new RpcRequestException(e);
}
})
);
но будет блокироваться до истечения времени ожидания соединения
И я попробовал другой код. Я добавляю handle
метод и помещаю ответ на карту.
Тогда я могу получить Mono.fromSupply()
с разрывом цикла while в map.get(key) != null
.
Это заблокирует поток.
.handle(((nettyInbound, nettyOutbound) -> nettyInbound
.receiveObject()
.map(RpcDataPackage.class::cast)
.doOnNext(pkg -> {
String responseKey = "a key"
responseMap.put(responseKey, pkg);
})
.then()))