如何实现通用的 Thrift Proxy?
How to implement a generic Thrift Proxy?
在 Apache Thrift 中是否可以创建通用代理?例如在代理中,我想做 request/response 日志记录或测量性能。对于所有 RPC 调用,流程应该类似于客户端 <-> 通用代理 <-> 服务器。
实施自定义 Thrift "layered" 协议或自定义 Thrift 传输,根据需要拦截您的调用。
许多语言都采用了 multiplexed protocol which uses a generic TProtocolDecorator
. That piece of code looks quite handy for that task. Look at the implementation of TMultiplexedProtocol
,看看它是如何使用的。基本上 TProtocolDecorator
class 完成了大部分的魔法,您只需要覆盖一些方法并将新开发的协议像往常一样插入 Thrift transport/protocol 堆栈。
或者,您的目标可以通过添加分层传输来实现,类似于 TBufferedTransport
。但在那种情况下,你没有数据背后的语义,你只能看到字符串,而在协议级别,你有像 WriteMessageBegin
或 ReadMessageBegin
这样的方法,这让生活变得更容易。
在 Apache Thrift 中是否可以创建通用代理?例如在代理中,我想做 request/response 日志记录或测量性能。对于所有 RPC 调用,流程应该类似于客户端 <-> 通用代理 <-> 服务器。
实施自定义 Thrift "layered" 协议或自定义 Thrift 传输,根据需要拦截您的调用。
许多语言都采用了 multiplexed protocol which uses a generic TProtocolDecorator
. That piece of code looks quite handy for that task. Look at the implementation of TMultiplexedProtocol
,看看它是如何使用的。基本上 TProtocolDecorator
class 完成了大部分的魔法,您只需要覆盖一些方法并将新开发的协议像往常一样插入 Thrift transport/protocol 堆栈。
或者,您的目标可以通过添加分层传输来实现,类似于 TBufferedTransport
。但在那种情况下,你没有数据背后的语义,你只能看到字符串,而在协议级别,你有像 WriteMessageBegin
或 ReadMessageBegin
这样的方法,这让生活变得更容易。