我有一個Adpapter類的集合,可以連接到各種API,哪些不是。下面是每個適配器是如何建立一個簡單的,一般的例子:Ruby錯誤處理:拯救子類中的異常
class AmazonAdapter
include Sidekiq::Worker
def perform(id)
get_results_from_api(id)
end
end
class WalmartAdapter
include Sidekiq::Worker
def perform(id)
get_results_from_api(id)
end
end
所以一般情況下,通過調用AmazonAdapter.new(500)
,它會連接到API並返回受你傳遞什麼作爲ID的結果。這是Sidekiq收集過程的一部分,並作爲後臺作業運行,所以它不一定會拋出明顯的異常或錯誤,以便在出現問題時提醒我。
我想使用AirBrake的通知系統在API沒有正確連接或者引發其他錯誤時通知我,但是沒有停止收集過程或sidekiq。我希望將錯誤處理和通知系統主流化。
的幾點思考我是要創建一個父類的子類可以繼承看起來類似於這樣:
class Adapter
include Sidekiq::Worker
def perform(id)
begin
#execute subclass perform method
rescue Exception => e
Airbrake.notify(e)
end
end
end
但我不是去了解這一點的最好辦法真正確定。我真的可以使用這個建議或幫助,謝謝!
謝謝!我會試試這個。我明白你永遠不想拯救一個例外。但是我正在運行一個應用程序來完成一件事,那就是通過管道系統收集數據(用光纖/線程實現)。一旦一名工作人員被解僱,它同時發動了數百個工作,而且這是一次邊檢,我沒有收到沒有發生的收集通知。我不一定希望它拋出異常,因爲我想讓工人繼續工作。當你說「如此sidekiq做他的工作」,你的意思是讓他繼續重新工作? – sclem72
'當你說「所以sidekiq做他的工作」時,你的意思是讓他繼續重試工作嗎? - 是的。 Sidekiq將根據'Worker'實現中指定的'retry:true | false'參數重試或靜默跳過重試。順便說一句,'Exception'的救援沒有多大意義,因爲'OutOfMemory'和其他'Exception'通常不可操作。 – mudasobwa