Ruby 如何从Rails应用程序thorugh Apache Thrift异步访问Java后端服务?
因此,我有一个相当繁重的后端服务,它是用Java编写的,通过Apache Thrift连接到Rails应用程序。我正在使用TCP连接访问远程计算机上运行的后端服务 对于每个传入请求,我的Rails控制器执行以下操作:Ruby 如何从Rails应用程序thorugh Apache Thrift异步访问Java后端服务?,ruby,ruby-on-rails-3,web-applications,asynchronous,thrift,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) c
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乘客与Apache一起使用。我希望最多能看到几十到几百个并发连接。我的Web服务器位于一个带有1.7GB RAM的小型ec2实例上
我对Ruby/Rails(来自Java/C++背景)相当陌生,因此仍在努力掌握Ruby领域的工作原理。是的。只需在节俭定义中使用
async
修饰符。方法返回类型必须为void。请注意,您不能保证消息已成功处理,只能保证消息已发送到服务器
service MyService
{
async void processUserRequest(1: Query query);
}
我知道我可以使用Thrift服务的异步版本,但是如何捕获返回值呢?回拨?事件?