2016-09-21 209 views
2

在Apache Thrift中可以創建一個通用代理?對於例如在代理中,我想要做請求/響應日誌或測量性能。流程應該與客戶端< - >通用代理服務器< - >服務器的所有RPC調用。如何實現通用的Thrift代理?

+0

給選民的提示:這個問題並不是關於服務器基礎設施。 – JensG

回答

3

實現自定義的Thrift「分層」協議或自定義Thrift傳輸,可根據需要攔截您的呼叫。

很多語言都採用multiplexed protocol,它使用通用的TProtocolDecorator。這段代碼看起來非常方便。看看implementation of TMultiplexedProtocol看看它是如何使用的。基本上TProtocolDecorator類完成了大部分的魔術,你只需要重寫一些方法,像往常一樣將新開發的協議插入Thrift傳輸/協議棧。

或者,您的目標可以通過添加分層傳輸來實現,類似於TBufferedTransport。但是在這種情況下,您不具備數據背後的語義,只能看到字符串,而在協議層面,您可以使用像WriteMessageBeginReadMessageBegin這些方法,這使生活變得更加簡單。

+0

如果我使用多路複用協議,我的代理不再是通用的,不是嗎?在這種情況下,我需要註冊所有處理器。 –

+1

我提到了多路複用協議作爲**示例**。我不建議在你的代碼中使用Multiplex,這對你來說無能爲力。相反,您希望將其用作您想在「TProtocolDecorator」之上開發的一些自己的協議的藍圖,以實現您的目標。 – JensG