5

私は、顧客の払い戻しがスウェットショップの労働者に渡される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に「遅延」機能は見つかりませんでした。これは、これまでに考え出した中で最高のソリューションです。再キューイング中のビジーループを回避したい。

4

3 に答える 3

3

RuoteやMinionのようなものを見たことがありますか?

ここにいくつかのリンク:http://delicious.com/alexisrichardson/rabbitmq+work+ruby

ネイティブのRubyを話さないが、HTTP+JSONを話すCeleryを試すこともできます。

上記のすべてがRabbitMQで機能するため、役立つ場合があります。

乾杯

アレクシス

于 2010-01-05T16:39:07.310 に答える
1

時限配達サービスはありますか?ペイロードとして配信するメッセージを送信し、配信までの時間でまとめると、サービスは指定された時間に達するまでメッセージを保持します。私の知る限り、RabbitMQサーバーやAMQPクライアントライブラリにはそのようなものはありませんが、持っていると便利です。

于 2010-01-05T14:12:46.553 に答える
0

AMQP(または少なくともRabbitMQ)が「このジョブを遅らせる」という考えをサポートしているようには見えません。したがって、失敗した場合にワーカー内から同じジョブを再キューイングするアプローチは、現時点で最善の解決策のようです。

コードはデモ環境で動作しており、これまでのニーズを満たしています。

于 2010-01-10T14:52:08.420 に答える