RabbitMQの中に搾取工場の仕事をキューに再登録
-
18-09-2019 - |
質問
私は、顧客の払い戻しは搾取工場の労働者に渡されRailsアプリケーションに取り組んでいます。返金が失敗した場合(私たちはその時点での支払い処理に達することができないので)私が仕事をキューに再登録します。
class RefundWorker < Sweatshop::Worker
def process_refund(job)
if refund
Transaction.find(job[:transaction]).update_attributes(:status => 'completed')
else
sleep 3
RefundWorker.async_process_refund(job) # requeue the job
end
end
上記よりもこれを行うに任意のより良い方法はありますか?私はRabbitMQの中に任意の「遅れ」機能を発見していない、これは私がこれまでに作ってみた最適なソリューションです。私はrequeueingながらビジーループを避けたい。
解決 3
これは、AMQP(あるいは少なくともRabbitMQの)ように見えるしていませんという考えをサポート「この仕事を遅らせるを。」それが失敗したのであれば、作業者の内部からの再キューイング同じ仕事へのアプローチは、この時点で最善の解決策であるように思われる。
私は、デモ環境で動作するコードを持っており、それはこれまでの私のニーズを満たします。
他のヒント
あなたはルーテとミニオンのようなものを見ていますか?
ここではいくつかのリンク: http://delicious.com/alexisrichardson/rabbitmq+work+ruby の
また、ネイティブのRuby話すことはありませんが、HTTP + JSONを話すんセロリを試すことができます。
のRabbitMQと上記の作品のすべてので、あなたを助けるかもしれない。
乾杯
アレクシス
時限配信サービスをお持ちですか?あなたは、タイム・トゥ・提供に包まれたペイロードとして提供するメッセージを送信したい、と指定した時間に達するまでのサービスは、メッセージを握るだろう。そのようなものは、私の知る限り承知しているとして、RabbitMQのサーバやAMQPクライアントライブラリのいずれかに存在していないが、あると便利なものになると思います。