В Apache Thrift можно создать общий прокси? Напр. в прокси-сервере я хочу сделать запрос/отклик или измерить производительность. Поток должен быть как Клиент < -> Общий прокси < -> Сервер для всех вызовов RPC.Как реализовать общий прокси-сервер Thrift?
ответ
Внедряйте собственный «многоуровневый» протокол или специальный транспортный трюк, который перехватывает ваши вызовы по мере необходимости.
Многие языки приняли multiplexed protocol, который использует общий TProtocolDecorator
. Эта часть кода выглядит очень удобно для этой задачи. Посмотрите на implementation of TMultiplexedProtocol
, чтобы узнать, как он используется. В основном класс TProtocolDecorator
делает большую часть магии, вам нужно только переопределить некоторые методы и подключить недавно разработанный протокол к стеку транспорта/протокола Thrift, как обычно.
В качестве альтернативы, ваша цель может быть достигнута путем добавления многоуровневого транспорта, аналогичного TBufferedTransport
. Но в этом случае у вас нет семантики данных, вы видите только строки, тогда как на уровне протокола у вас есть методы вроде WriteMessageBegin
или ReadMessageBegin
, которые делают жизнь намного проще.
Если я использую мультиплексированный протокол, мой прокси-сервер больше не является общим, не так ли? В этом случае мне нужно зарегистрировать все процессоры. –
Я упомянул мультиплексный протокол как ** пример **. Я не рекомендовал использовать мультиплекс в коде, что бы не помогло вам здесь. Вместо этого вы хотите использовать его в качестве плана для своего собственного протокола, который вы хотите разработать поверх «TProtocolDecorator» для достижения ваших целей. – JensG
Примечание для близких избирателей: этот вопрос не касается инфраструктуры сервера. – JensG