2017-05-24 11 views
0

私はRuby on Railsアプリケーションを実行する顧客対応のウェブサイトを持っています。ユーザーは注文を行い、一連のバックグラウンドレーキタスクを使用して内部ERPシステムに同期されます。 30分ごとに遅延APIコールを送信して再試行する方法を教えてください。

内部システムをRoR APIスタイルのアプリケーションとして再構築しているため、Webアプリケーションは基本的に、注文が保存されたときに内部アプリケーションにapi呼び出しを送信します。 ActiveResourceまたはROAR &遅延ジョブなどを使用しています。

何らかの理由で内部APIがダウンした場合 - ウェブサーバーに顧客の注文を保存し、利用可能になった時点でAPIに同期するのはどのような戦略ですか?これは、iPhone/Androidで起こることと似たようなもので、情報をローカルに保存し、後でクラウドAPIに同期させることができます。クライアントがRoRサーバーアプリケーションである場合を除きます。このための準備ができたソリューションはありますか?または、私は独自の「ローカルDBに保存 - >同期をAPIを非同期に戻す」タイプのソリューションを実装する必要がありますか?

  • Webアプリケーション:RoR + jQuery基本的なCRUDタイプのアプリ、何も気にしない。 パブリッククラウドに座っています。
  • 内部API:RoR + Trailblazer API、MariaDBを使用 クラスタは社内のデータセンター内にあり、ファイアウォールの内側にあります。

答えて

1

このための準備ができたソリューションはありますか?

それとも私は自分自身を実装する必要があり、「ローカルDBに保存する - それが戻ってきたときに、非同期APIへ>同期を」タイプのソリューションを?

はい。これは比較的単純なミニプロジェクトです。私は実際に昨日それをしました。わずか数時間しかかかりませんでした。

ローカルストレージの場合は、postgresql(私はHerokuのホスト)を使用します。

私はNfpAdmin::ServiceRequestレコードを使用して、各トランザクションの試みの結果を追跡します。それは次のようになります。

# == Schema Information 
    # 
    # Table name: nfp_admin_service_requests 
    # 
    # id    :integer   not null, primary key 
    # service_name  :string 
    # status   :string   default("created") 
    # percent_complete :integer   default(0) 
    # details   :jsonb   not null 
    # created_at  :datetime   not null 
    # updated_at  :datetime   not null 
    # 

    class NfpAdmin::ServiceRequest < ActiveRecord::Base 
    serialize :details, HashSerializer 
    validates :service_name, 
       :details, 
       presence: true 
    end 

私はCloudAMQPを使用して夜間にジョブを実行し、(当然、私の本当のservice_nameを使用して)引く:jsonb列(details)で

NfpAdmin::ServiceRequest.where(service_name: 'foo').where.not(status: 'complete') 

、私はを追跡しますそのサービス要求に対するすべての試行されたトランザクション、結果、エラーメッセージなど

現在、リモートAPI(第三者)からプッシュメッセージを受け取り、要求をプルします。 APIは自分のシステムからの更新を許可しますが、私のユースケースではそれをまだ呼び出すことはありません。

2方向データ交換を行う一連の独自のAPI Webサービスを実行します。

+0

ありがとうございました。ローカルストレージには何を使用しましたか?そして、あなたはどのようにシンクしましたか:片道か2通り? – konung

+0

素晴らしい。例を投稿していただきありがとうございます。あなたのアイデアを見て、他の人によって検証されてうれしいです:-) – konung

+1

確かです。あなたのボートが浮かんでいる場合は、答えを受け入れてください。 – jvillian

関連する問題