了解Thrift并实现处理程序

时间:2015-08-11 18:46:04

标签: thrift

我是Apache Thrift的新用户,试图巩固我对如何正确使用Thrift的理解。

我理解Thrift用于抽象应用程序函数并为服务器和客户端生成多种语言的样板代码,我知道我作为用户需要做的就是实现一个处理程序来执行某种类型的功能,但细节让我困惑。

具体来说,我正在尝试使用Thrift为Golang中的Facebook Scribe生成服务器,该服务器会在收到数据后立即监听数据并对该数据执行某些功能。在这种情况下,似乎我甚至不需要客户端来调用,因为我希望服务器在每次收到数据时都采取行动。

我关注此服务器作为示例,因为它似乎是我感兴趣的开源版本:https://github.com/mindreframer/golang-stuff/blob/master/github.com/tumblr/gocircuit/src/tumblr/scribe/server.go

有谁能告诉我这是否适合我的用例?如果是这样,我是否必须实现处理程序并在日志消息功能中执行我的操作?如果是这种情况,有人可以指向我实际调用日志消息功能的位置吗?我无法理解Thrift工作流程。谢谢!

1 个答案:

答案 0 :(得分:1)

  

具体来说,我正在尝试使用Thrift为Golang中的Facebook Scribe生成服务器,该服务器会在收到数据后立即监听数据并对该数据执行某些功能。

作为一种免责声明,我不了解Scribe,但我可以给你一些通用的大纲。

首先,从本质上讲,Thrift是 RPC and serialization framework 。区别不是偶然或者说听起来更好,它是故意放的,因为可以使用没有RPC部分的序列化东西。实际上,这很有意义,可能的用例包括用于其他目的的序列化数据,或者将Thrift与MQ或消息总线系统结合使用,仅举几例。

  

在这种情况下,似乎我甚至不需要客户端来调用,因为我希望服务器在每次收到数据时都采取行动。

远程过程调用(RPC)意味着我们有一个调用者和一个被调用者,或者通常的术语,客户端和服务器。服务器只接收某人发送的呼叫 - 客户端。

server and client

因此,您至少需要一些数据源,通过调用服务契约中定义的接口方法之一将Thrift消息提供给服务器。如果Scribe可以做到这一点(至少这是Go源对我的看法),你可能需要通过调用Listen()告诉Scribe以何种方式调用服务器。

// Listen binds a Scribe protocol server to bind address 
// and dispatches incoming requests to the handler. 
func Listen(bind string, handler Handler) error { ...

test code所示。在测试期间,这些调用由专用测试客户端模拟。