В процессе получения экспертизы по этому фреймворку, хотелось бы получить ответы на некоторые затыки, которые сам не смог решить.
Каналы отличная абстракция, но кажется, что на каждое сообщение создавать канал не очень производительное решение. Есть ли у кого опыт заворачивания прогонки батча сообщений в один канал
или это не стоит того ?
То есть хотелось бы уйти от
bootstrap.connect().addListener(
(ChannelFutureListener) connectionFuture -> connectionFuture.channel().writeAndFlush(msg));
на каждое сообщение.
Самый главный вопрос, в моем приложении мне нужно получить финальный респонс от сервера, в котором будет статус код.
Не нашел элегантного решения, кроме как складывать статус в аттрибут канала. К тому же, чтобы гарантированно дождаться ответа с респонзом нужно вызывать sync(), что ударяет про перформансу обработки пайплайна. Хотелось бы уйти от sync() и как-то решить вопрос откуда мне забирать статус и куда его соответственно сохранять.
pipelineFuture.channel().closeFuture().sync().addListener(
(ChannelFutureListener) future -> {
if (future.isSuccess()) {
AttributeKey<Integer> status = AttributeKey.valueOf(future.channel().id().asShortText());
Integer statusCode = future.channel().attr(status).get();
}
});
сторим статус в финальном хендлере
@Override
public void channelRead(ChannelHandlerContext ctx, Object in) {
ctx.channel().attr(AttributeKey.valueOf(channelId)).set(statusCode);
}
java, netty