2013-10-23 43 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