Thrift(Apache)在相同的线程池或线程下使用多个服务

时间:2014-06-15 08:51:43

标签: thrift thrift-protocol

我们使用Apache thrift(在我们的案例中为Windows)来定义由我们的可执行文件公开的多个服务。我们通常最终使用新方法扩展一个服务接口,否则我们将不得不创建新线程(至少一个)来为新定义的“thrift服务”提供服务

有没有办法在thrift中使用相同的底层线程来处理多个thrift服务定义?

1 个答案:

答案 0 :(得分:1)

从0.9.x开始,Thrift支持某些语言的多路复用协议。从那时起,为其余语言添加了几个实现。

与往常一样,遵循的路径非常相似。您将两侧的TMultiplexedProtocol添加到传输堆栈。代码库中还有一些例子。

这有一些影响:

  • 由于TMultiplexedProtocol是分层协议,因此所有服务共享相同的端点协议(例如二进制)和传输(例如套接字)。在大多数情况下,这正是您想要的。如果您需要不同的传输或端点协议,则仍需要设置不同的服务。

  • 理论上可以通过多路服务器替换服务器,但尚未针对所有语言完全实现,请参阅下文。详细信息可在THRIFT-1915中找到。

  

关于兼容性:新的多路复用使用分隔符char。可以以这样的方式修改现有代码,其中存在默认服务(其将是旧的,未经多路复用的服务),只要在名称中找不到分隔符就会调用该服务。如果默认值为null或为空,则代码的行为与实际解决方案相同。

如果您需要对您选择的语言进行相对简单的修改并希望提供补丁,我们将很乐意对其进行审核和整合。