2012-03-09 8 views
1

私は、サービス指向のアプリケーションを書く初心者です。だから、これはいくつかの場合は些細な質問かもしれません。Rubyサービス指向アーキテクチャ - 同期を確実にする方法?

現在の設定は次のとおりです。

1 - ベースレールアプリ。また、ルートといくつかのアプリケーションロジックが含まれています。
2 - いくつかのサービス。私はベースレールアプリからこれらを抽出しました。彼らは主にDBの広範なリソースであるか、またはSQLを使用しないソリューションを使用しています。

だから、私は何をやってしまっていることは、私のレールのアプリでこの

のようなものですが、私は場所にすべての基本的なCRUD操作に応答した場所のコントローラを持っています。内部的には、PlaceサービスへのHTTPコールを行います。

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

問題は、複数のサービスコールを行うと、ビューをレンダリングする前にすべてに対して応答があることを確認する方法ですか?また、1つのサービスコールでも、Railsのレンダリングプロセスはどのように機能しますか?たとえば、サービスが応答するのに時間がかかる場合、ページはレンダリングされるのか、応答が無限に待機するのでしょうか?

+1

私はActiveResourceを使用することをお勧めします。メンテナンスがはるかに簡単です。 – apneadiving

+2

docsページには、特に並列要求を作成し、すべての処理が完了するまで待機する方法が記述されています。 https://github.com/dbalatero/typhoeus –

+0

おそらくこの本[RubyとRailsを使ったサービス指向設計](http://my.safaribooksonline.com/book/web-development/ruby/9780321700124)が必要なものです – Anatoly

答えて

0

Typhoeusに関して私が一度も使ったことのない質問には答えられませんが、私はSOAのこの問題についてより一般的に答えようとします。

一般的なスレッドは、UIが多くのサービスから構成され、これらのサービスの一部がダウンしているか、応答しない可能性があるということです。

1)ドロップダウン・ブラウザから構図を行います

あなたはいくつかのオプションがあります。バックボーンのようなものを使用し、各サービスにAjaxリクエストを行います。これらの要求の多くは非同期で行い、返されたときにはページの各部分をレンダリングします。返さない場合、その部分をレンダリングしない、またはBackboneにその領域のプレースホルダをレンダリングさせることができます。

2)コントローラーにモデルオブジェクトを構築する場合(例のように)、タイムアウトを何とか処理しなければならず、何も応答しないサービスに対してプレースホルダモデルを使用する必要があります。これは、サービスによっては、データを保持することの重要性と、タイムアウトとみなして移動するまでにどれだけの時間を待つかを決めることができます。

たとえば、Amazonの製品ページを参照してください。そのサービスから製品についての詳細を知ることは非常に重要です。もしそれが得られなければ、おそらくブラウザにエラーを投げる価値があります。しかし、「購入したこの製品を購入した顧客」サービスが応答していない場合は、それを待つのをやめ、ページを表示せずにページをレンダリングしても問題ありません。

もう一度 - 私はTyphoeusを知らないので、これをどのように管理するのかよく分かりませんが、うまくいけば、これが役立ちます。がんばろう!