У меня есть требование для реализации службы, которая действует как прозрачный HTTP-прокси, она должна сделать следующее:
- Получить HTTP-запрос (TLS уже будет прерван, поэтому мы говорим просто HTTP здесь)
- Добавить заголовок к запросу
- Переслать измененный запрос в его целевое назначение неблокирующим образом
- Закрепить / повесить на запрос на последующее использование
- Когда ответ возвращается, верните его вызывающей стороне.
- Упакуйте ответ и запрос (спрятанный в # 4) и отправьте их другой системе в неблокирующая мода.
Прочитав документы Netty, мне удалось собрать воедино что-то очень примитивное, которое принимает HTTP-запрос от клиента и возвращает HTTP-ответ, поэтому используются следующие компоненты Netty. в конвейере одного сервера:
- HttpServerCode c
- HttpObjectAggregator
Обработчик, который я написал, w который расширяет ChannelInboundHandlerAdapter
, который выглядит следующим образом:
void channelRead(final ChannelHandlerContext ctx, final Object msg) throws Exception {
try {
FullHttpRequest httpRequest = (FullHttpRequest) msg
ensureAuditingHeaderIsPresent(httpRequest)
ctx.writeAndFlush(new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK))
println("Response written...")
}
finally {
ReferenceCountUtil.release(msg)
}
}```
Все это работает так, как я ожидал, в результате чего клиенту возвращается ответ 200 (хотя и пустой) ). Однако я изо всех сил пытаюсь понять, какой подход я мог бы использовать для реализации перенаправления HTTP-запроса и возврата ответа клиенту.
Сначала я хотел использовать asyn * 1044. * Клиентская библиотека HTTP, но у меня такое ощущение, что мне не хватает чего-то встроенного в Netty, что позволило бы мне сделать это в конвейере? Возможно, какой-то исходящий ChannelOutboundHandlerAdapter
?
Как вы можете сказать, мое нынешнее понимание внутренних функций Netty очень основательно c, поэтому я благодарен за любые указатели!
Последний вопрос: является ли Книга «Нетти в действии 2015» все еще стоит прочитать? Я не хочу покупать его, если он будет полностью устаревшим, но если он по-прежнему актуален, может быть, стоит прочитать?
Большое спасибо,
Edd