2013-10-23 88 views
1

我的公司目前正在研究Thrift和ActiveMQ的集成。我們希望建立一個獨立於語言的服務層,它可以在單個http服務器上運行,每個節點服務都可以通過ActiveMQ與其他節儉服務進行通信。到目前爲止,我一直無法找到任何試圖實施這一點的人。我很好奇其他人可能會如何執行此操作,以及是否有這樣做的文檔。Thrift + ActiveMQ集成

當前的原型使用一個簡單的python服務器來承載各種節儉的服務。在每個服務調用中(即更新一個設置),創建一個ActiveMQ消息並將其發送到一個特定的隊列(即一個應用程序的設置服務發送更新消息給另一個)。爲設置服務的每個實現創建一個服務偵聽器,該服務能夠掃描相應的隊列並檢測何時發送相關消息。該監聽器然後使用Thrift爲該特定應用程序訪問相應的服務。

我試圖找出一種方法來允許服務爲節儉對象服務,但也收到ActiveMQ消息,而無需創建這些偵聽器,但我一直無法找到任何資源。

謝謝!

回答

1

從你的描述,你必須至少選擇,恕我直言:

(1)利用序列化部分和序列化的消息寫入隊列。偵聽器將它們反序列化並將它們饋送到(本地)處理器實例,從而觸發其餘的處理。

(2)編寫一個專用的傳輸器來支持ActiveMQ。這可能有助於更好地封裝序列化/反序列化的東西,併爲客戶端/處理器提供通常的調用接口。

兩個多提示:

  • 看一看THRIFT-812,這表明與ZeroMQ
  • 組合看一看爲oneway方法節儉文檔。你會發現它們對於消息排隊場景非常有用。

我所說的輸入數據送入當地的處理器實例是什麼意思?好的,這是我之前寫過的一段代碼,用於證明這一點。它是用Delphi編寫的,但應該足夠簡單,使您可以將它翻譯成您選擇的任何其他語言。請求數據在此特例中傳遞並預期爲JSON,因此是JSON協議。

class procedure TTextToolJsonServer.Process(const stmIn, stmOut : TStream); 
var handler : Samples.TTextTool.Iface; 
    processor : IProcessor; 
    protIn, protOut : IProtocol; 
begin 
    protIn := TJSONProtocolImpl.Create(
       TStreamTransportImpl.Create(
       TThriftStreamAdapterDelphi.Create(stmIn, FALSE), nil)); 

    protOut := TJSONProtocolImpl.Create(
       TStreamTransportImpl.Create(
       nil, TThriftStreamAdapterDelphi.Create(stmOut, FALSE))); 

    handler := TTextToolHandler.Create; 
    processor := Samples.TTextTool.TProcessorImpl.Create(handler); 
    processor.Process(protIn, protOut); 
end; 
+0

您可以擴展爲他們提供本地處理器實例嗎? – Swamp56

+0

編輯到答案中。 – JensG