2012-03-09 41 views
1

我是編寫面向服務的應用程序的新手,所以這對於一些人來說可能是一個微不足道的問題。Ruby面向服務的體系結構 - 如何確保同步?

我目前的設置是這樣的:

1 - 基礎導軌應用程序。還包含路由和一些應用程序邏輯。
2 - 一些服務。我已經從我的基礎導軌應用程序中提取這些。他們大部分是數據庫廣泛的資源,或者使用了非SQL解決方案。

所以,我已經結束了做的是一樣的東西在我的Rails應用此

,我有一個地方控制器,這是爲了響應地方上所有的基本的CRUD操作。它在內部對地點服務執行HTTP調用。

def show 
    req = Typhoeus::Request.new('http://127.0.0.1:7439/places/#{params[:id]}.json') 
    @places = req.response.body 
end 

的問題是,如果我超過1個服務電話,那麼如何確保我有渲染的意見之前,所有的反應如何?另外,即使有1個服務調用,Rails渲染過程如何工作?例如,如果服務需要很長時間才能響應,頁面是否呈現或者無限等待響應?

+1

我建議你使用ActiveResource,會容易得多。 – apneadiving 2012-03-09 13:10:40

+2

文檔頁面特別說明如何進行並行請求並等待所有完成。 https://github.com/dbalatero/typhoeus – 2012-03-09 13:17:11

+0

可能這本書[面向服務的設計與Ruby和Rails](http://my.safaribooksonline.com/book/web-development/ruby/9780321700124)是你所需要的 – Anatoly 2012-03-27 03:24:06

回答

0

我無法專門回答您的問題,因爲我從來沒有使用過Typhoeus,但我會嘗試在SOA中更全面地回答這個問題,並希望它會有所幫助。

常見的問題是UI應該由許多服務組成,並且容忍某些服務可能停機或無響應的可能性。

您有幾種選擇:

1)下拉菜單,然後從瀏覽器做組成。使用Backbone之類的東西,並向每個服務發出Ajax請求。您可以異步執行這些請求中的很多請求,並在返回時呈現頁面的每個部分 - 如果沒有返回,請不要渲染該部分 - 或者讓Backbone在該區域中呈現某種佔位符。 2)如果你想在你的控制器中建立一個模型對象(如你的例子),你必須以某種方式處理超時,並再次使用佔位符模型來處理任何無響應的服務。關於這一點的好處是,根據服務的不同,您可以決定獲取數據的關鍵因素以及在您考慮暫停之前願意等待多少時間並繼續前進。

以亞馬遜產品頁面爲例。從服務中獲取產品的詳細信息非常重要 - 如果您沒有得到這些信息,那麼向瀏覽器投放錯誤可能是值得的。但是,如果「購買此產品的客戶還購買...」服務沒有響應,則可以停止等待它並呈現沒有它的頁面。

再次 - 我不知道Typhoeus,所以我不知道如何使用它來管理這個,但希望這有助於。祝你好運!