了解 Thrift 和实现处理程序

Understanding Thrift and Implementing a handler

我是 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 工作流程。谢谢!

Specifically, I am trying to use Thrift to generate a server for Facebook's Scribe in Golang that would listen for data and perform some function on that data as soon as it receives it.

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

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

In this case, it seems that I don't even need a client to call, as I want the server to act every time data is received.

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

因此,您至少需要一些数据源,通过调用服务契约中定义的接口方法之一,将 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。在测试期间,这些调用由专用测试客户端模拟。