2010-01-05 21 views
5

मैं एक रेल आवेदन जहां ग्राहक रिफंड एक कठोर परिश्रम कार्यकर्ता को सौंप दिया जाता है पर काम कर रहा हूँ में एक sweatshop काम requeue। यदि धनवापसी विफल हो जाती है (क्योंकि हम उस समय भुगतान प्रोसेसर तक नहीं पहुंच सकते हैं) मैं नौकरी की आवश्यकता चाहता हूं।RabbitMQ

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 में कोई "देरी" सुविधा नहीं मिली है, और यह अब तक का सबसे अच्छा समाधान है। मैं आवश्यकता के दौरान व्यस्त लूप से बचना चाहता हूं।

उत्तर

0

यह AMQP (या कम से कम RabbitMQ) की तरह प्रतीत नहीं होता है के विचार का समर्थन करता है "इस काम में देरी।" तो कार्यकर्ता के अंदर से एक ही नौकरी फिर से कतारबद्ध करने का दृष्टिकोण यदि यह विफल रहता है तो इस समय सबसे अच्छा समाधान प्रतीत होता है।

मैं एक डेमो माहौल में काम करने कोड है और यह अब तक मेरी जरूरतों को पूरा करने।

1

समय-डिलीवरी सेवा है? आप संदेश को पेलोड के रूप में वितरित करने के लिए भेज देंगे, जो समय-समय पर डिलीवरी के साथ लपेटा जाएगा, और सेवा निर्दिष्ट समय तक पहुंचने तक संदेश पर रखेगी। जैसा कि मुझे पता है, खरगोश एमक्यू सर्वर या किसी भी एएमक्यूपी क्लाइंट पुस्तकालयों में ऐसा कुछ भी नहीं है, लेकिन यह एक उपयोगी बात होगी।

+0

अजवाइन एक ईटा/उलटी गिनती के साथ कार्यों के लिए ऐसा करता है। यह सिर्फ संदेशों पर निर्भर करता है, और ईटा पूरा होने पर कार्यों को निष्पादित करने वाला शेड्यूलर होता है। चूंकि संदेशों को स्वीकार करने की आवश्यकता है, उन्हें पकड़ना कोई समस्या नहीं है, हालांकि क्यूओएस प्रीफेच गणना का उपयोग करते समय यह थोड़ी क्विंकी है, क्योंकि हमें प्रत्येक बार ईटा के साथ संदेश प्राप्त होने पर प्रीफ़ेच गिनती बढ़ाना पड़ता है, और इसे कम करता है ईटा संदेश संसाधित किया गया है। – asksol

3

आप जुड़वा और मिनियन जैसी चीजों को देखा है?

यहाँ कुछ लिंक: http://delicious.com/alexisrichardson/rabbitmq+work+ruby

तुम भी अजवाइन जो देशी रूबी बात नहीं करता लेकिन HTTP + JSON बात करता है की कोशिश कर सकते।

RabbitMQ के साथ ऊपर काम के सभी है, तो आप मदद कर सकते हैं।

चीयर्स

एलेक्सिस

+0

वैकल्पिक ग्राहकों के लिए धन्यवाद। जब भी संभव हो मैं वास्तव में रूबी के साथ चिपक जाता हूं और स्वीटशॉप/गाजर बहुत अच्छा काम कर रहा है। एएमक्यूपी में उनका विलंब कार्य प्रतीत नहीं होता है, इसलिए इस बिंदु पर पुनः कतार सबसे अच्छा विकल्प प्रतीत होता है। मेरे पास विकास में कोड है जो मैं चाहता हूं, बस सोच रहा हूं कि कोई बेहतर तरीका नहीं है या नहीं। –

संबंधित मुद्दे