سؤال

أنا أعمل على تطبيق القضبان حيث يتم تسليم المبالغ المستردة للعملاء إلى عامل sweatshop. إذا فشل استرداد الأموال (لأننا لا نستطيع الوصول إلى معالج الدفع في ذلك الوقت) أريد أن أطلب المهمة.

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 (أو على الأقل أرنب) يدعم فكرة "تأخير هذه الوظيفة". لذلك فإن النهج لإعادة انتظار نفس المهمة من داخل العامل إذا فشل ذلك هو الحل الأفضل في هذا الوقت.

لدي التعليمات البرمجية التي تعمل في بيئة تجريبية وتلبي احتياجاتي حتى الآن.

نصائح أخرى

هل نظرت إلى أشياء مثل ruote و minion؟

بعض الروابط هنا: http://delicious.com/alexisrichardson/rabbitmq+work+ruby.

يمكنك أيضا تجربة الكرفس التي لا تتحدث RUBY الأصلية ولكن تتحدث HTTP + JSON.

كل ما سبق العمل مع الأرانب، لذلك قد يساعدك.

هتافات

الكسيس

لديك خدمة التسليم في الوقت المناسب؟ سترسل الرسالة لتسليمها كحميم، ملفوفة مع تسليم وقت واحد، وسوف تتمسك الخدمة بالرسالة حتى يتم الوصول إلى الوقت المحدد. لا يوجد شيء مثل هذا موجودا في خادم Rabbitmq أو أي من مكتبات عميل AMQP، بقدر ما أعرف، لكن سيكون من المفيد أن يكون لديك شيء مفيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top