如何通过Apache Thrift从Rails应用程序异步访问我的Java后端服务?

时间:2012-10-12 00:51:08

标签: ruby ruby-on-rails-3 web-applications asynchronous thrift

所以我有一个用Java编写的非常繁重的后端服务,通过Apache Thrift连接到Rails应用程序。我正在使用TCP连接来访问在远程计算机上运行的后端服务。

对于每个传入请求,我的Rails控制器执行以下操作:

transport = Thrift::BufferedTransport.new(Thrift::Socket.new(SERVER_ADDRESS, SERVER_PORT))
protocol = Thrift::BinaryProtocol.new(transport)
client = MyService::Client.new(protocol)
transport.open()

@result = client.processUserRequest(query)

transport.close()

现在,上述服务调用会明确阻止后端服务器处理请求的整个时间。有没有办法让这个异步?因此,当后端服务器正在处理请求时,Web前端可以继续接受传入的HTTP请求。我有什么选择来实现这个目标?

我正在使用Phusion Passenger和Apache。我希望最多可以看到几十到几百个并发连接。我的Web服务器位于一个带有1.7 GB RAM的小型ec2实例上。

我是Ruby / Rails的新手(来自Java / C ++背景),所以仍然试图掌握Ruby领域的工作原理。

1 个答案:

答案 0 :(得分:0)

是。只需使用Thrift定义中的async修饰符。方法返回类型必须为void。请注意,您无法保证邮件已成功处理,只是已将其发送到服务器。

service MyService
{
   async void processUserRequest(1: Query query);
}