2017-05-24 58 views
0

我有一個運行Ruby on Rails應用程序的面向客戶的網站。用戶下訂單並使用一系列後臺佣金任務將其同步到內部ERP系統。每30分鐘一班。發送和重試延遲API調用的策略是什麼?

我們正在重建內部系統,因爲RoR API風格的應用程序,因此Web應用程序基本上只會在保存訂單時將API調用發送到內部應用程序。使用類似ActiveResource或ROAR &延遲工作或其他。

但是,如果內部API由於某種原因而關閉 - 在Web服務器上保存該客戶訂單,然後在API可用時將其同步到API的策略是什麼?這有點類似於iPhone/Android上發生的情況 - 它可以在本地保存信息並在稍後將其同步到雲API。除了客戶端是RoR服務器應用程序。有沒有現成的解決方案呢?或者,我應該實現自己的「保存到本地數據庫 - >同步到API異步返回時」類型的解決方案?

  • Web應用程序:RoR + jQuery基本的CRUD類型的應用程序,沒什麼奇特的。 坐在公共雲中。
  • 內部API: - RoR + Trailblazer API,使用MariaDB 集羣位於內部數據中心,位於防火牆後面。

回答

1

有沒有現成的解決方案呢?

或者我應該實現自己的「保存到本地數據庫 - >同步到異步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,自然):

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

jsonb列(details),我跟蹤每個嘗試的服務請求事件,結果,錯誤消息等。

當前,我從遠程API(第三方)接收推送消息並執行請求。該API允許從我的系統更新,但我的用例還沒有要求。

我運行一系列我自己的API Web服務,我在其中進行雙向數據交換。

+0

謝謝。你用什麼做本地存儲?你是如何同步的:單向還是雙向? – konung

+0

太棒了。感謝您發佈示例。很高興看到你的想法,由另一個人驗證:-) – konung

+1

當然。如果它漂浮你的船,請隨時接受答案。 – jvillian