簡體   English   中英

如何通過Rails應用程序Apache Thrift異步訪問Java后端服務?

[英]How do I asynchronously access my Java back end service from Rails app thorugh Apache Thrift?

因此,我有一個非常重的用Java編寫的后端服務,該服務通過Apache Thrift連接到Rails應用程序。 我正在使用TCP連接來訪問在遠程計算機上運行的后端服務。

對於每個傳入的請求,我的Rails Controller都會執行以下操作:

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請求。 為此,我有哪些選擇?

我在Apache上使用Phusion Passenger。 我希望最多看到幾十到幾百個並發連接。 我的Web服務器位於具有1.7 GB RAM的小型ec2實例上。

我是Ruby / Rails的新手(來自Java / C ++背景),因此仍然嘗試掌握Ruby領域的工作方式。

是。 只需在Thrift定義中使用async修飾符即可。 方法的返回類型必須為空。 請注意,您將無法保證已成功處理該消息,只是將其發送到服務器。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM