2015-12-31 2 views
1

У меня есть данные, хранящиеся в ThreadLocal (например, MDC), и мне нужно его обновить для каждого запроса.Как перехватить код в пуле потоков rx-netty

Использование http-клиента rx-netty Я ставлю это значение как заголовок http, но не могу найти крючок, где я могу прочитать это значение после того, как элемент управления передан в пул потоков netty, а затем установите его в потоке локальный нитей.

Возможно ли это, используя некоторые API?

ответ

1

Вы можете добавить netty's ChannelHandler, используя RxNetty's PipelineConfigurator (несколько как это: https://github.com/ReactiveX/RxNetty/blob/0.4.x/rxnetty-examples/src/main/java/io/reactivex/netty/examples/tcp/cpuintensive/CPUIntensiveServer.java#L66). Затем ваш код будет выполнен в eventloop Netty. Как только у вас есть пример кода, я могу изучить его, если вам нужна дополнительная помощь.

+0

@ nitest-kant Спасибо. Можете ли вы подробнее рассказать? В настоящее время я вижу, что строитель использует это: withPipelineConfigurator (DEFAULT_HTTP_PIPELINE_CONFIGURATOR) Как именно добавить обработчик канала? Кроме того, обработчик канала задает время сборки клиента, и мне нужен крючок, чтобы установить значение в потоке вызывающего, которое будет доступно, когда этот обработчик запущен в сетевом потоке и повторит эту логику для каждого HTTP-запроса. – YaOg

+0

@YaOg Вот суть, которая демонстрирует, как добавить обработчик и читать HTTP заголовки в обработчике: https://gist.github.com/NiteshKant/5202f396ac903d2dc0a4 обработчики выполняются в eventloop Нетти для каждой записи (который в этом случае предназначен для каждого запроса). –

+0

Спасибо. Я пробовал это, но теперь один и тот же запрос, выполняемый на том же сервере, терпит неудачу в тайм-ауте. – YaOg

Смежные вопросы