2011-02-02 11 views
8

, मैं आपको अपना वर्तमान दृष्टिकोण बताता हूं।मैं nodejs सर्वर को AWS SQS को कैसे सुन सकता हूं? विवरण में समस्या की व्याख्या करने से पहले

मेरे पास एक जेएस स्क्रिप्ट है जो setInterval() चलाती है। और प्रत्येक अंतराल, मैं कतार से संदेश प्राप्त करने के लिए एसक्यूएस को कॉल करूंगा। अगर कोई संदेश है, तो मैं इसे संसाधित करता हूं।
तो, जब तक मैं प्रक्रिया को मार नहीं जाता तब तक यह असीम रूप से चलाएगा।

मैं भी बजाय समय-समय पर चलाने के लिए setInterval होने के पहले एक नोड सर्वर (nodejs.org में उदाहरण का उपयोग)

तो, क्या मैं सोच रहा हूँ है, का निर्माण किया है ..। क्या कोई तरीका है कि यदि एसक्यूएस में कोई नया संदेश है, तो यह एक घटना को फायर करेगा और संदेश को संसाधित करेगा?

उत्तर

6

नहीं। आपको एसक्यूएस से एक संदेश का अनुरोध करना होगा।

यदि आपको वास्तव में पुश नोटिफिकेशन की आवश्यकता है तो SNS पर एक नज़र डालें। एसएनएस अच्छी तरह से काम करता है अगर आप कतार में एक संदेश जोड़ने के बाद अपने सर्वर को एसक्यूएस के लिए एक संकेत देना चाहते हैं।

3

एसक्यूएस अधिसूचना के लिए प्रदान नहीं करता है, लेकिन यदि एसक्यूएस में कोई नया संदेश है, तो क्या आपने जो कुछ भी बनाया है, वह संदेश भी node.js को दबा सकता है और कुछ मिनटों के लिए मतदान चालू कर सकता है। आप अपनी कतार में क्या चलते हैं इसके नियंत्रण में नहीं हो सकते हैं, लेकिन यदि आप हैं, तो मैं कतार मतदान शुरू करने के लिए अपने node.js को भी ट्रिगर करता।

यदि आप लागत के कारण मतदान के बारे में चिंतित हैं, तो आप जो कर सकते हैं वह कर सकते हैं- गतिशील रूप से अपने मतदान समय को बदलें। मेरी एसक्यूएस कतार हर 5 सेकंड में मतदान की जा रही है। यदि कोई नोड एक संदेश का पता लगाता है, तो यह तुरंत मतदान समय को कुछ सेकंड के लिए 200ms तक चला देता है। यदि यह कतार में किसी संदेश का पता नहीं लगाता है, तो यह 5 सेकंड के मतदान को फिर से हिट होने तक हर खाली अनुरोध के 50ms तक धीमा कर देता है।

पहला अनुरोध धीमा होने वाला है, कुछ ऐसा जो आप सौदा करने में सक्षम नहीं हो सकते हैं। इसका मुकाबला करने के लिए, मेरे पास मतदान के समय हर कुछ मिनटों में यादृच्छिक रूप से गति करते हैं। मतदान के कुछ नोड्स के साथ, प्रतिक्रिया समय आमतौर पर बहुत तेज़ होते हैं।

+2

यह अच्छा होगा अगर आप गतिशील मतदान समय के कुछ कार्य कोड को उदाहरण के रूप में पोस्ट कर सकें। – Mark

7

यह प्रश्न 2 साल से अधिक पुराने हैं .. लेकिन आपके मतदान अंतराल को बदलने से कहीं बेहतर तरीका है। इसके बजाय अपने कतार के संदेश को प्रतीक्षा करें अधिकतम 20 सेकंड तक प्रतीक्षा करें। फिर आप निरंतर मतदान कर सकते हैं लेकिन कतार खाली होने पर केवल प्रति मिनट 3 अनुरोध करेंगे। जब कतार में डेटा होता है तो प्रतिक्रिया तत्काल होगी।

2

आप इसे प्राप्त करने के लिए SQS Long Polling का उपयोग कर सकते हैं। लंबे मतदान से प्रतिक्रिया भेजने से पहले कतार में संदेश उपलब्ध होने तक अमेज़ॅन एसक्यूएस को प्रतीक्षा करने की अनुमति देकर खाली प्रतिक्रियाओं की संख्या कम हो जाती है। इससे एसक्यूएस के लिए लागत में भी काफी कमी आएगी।

यह आसान बनाने के लिए sqs-consumer नामक एक उत्कृष्ट लाइब्रेरी है।

const Consumer = require('sqs-consumer'); 

const app = Consumer.create({ 
    queueUrl: 'https://sqs.eu-west-1.amazonaws.com/account-id/queue-name', 
    handleMessage: (message, done) => { 
    // do some work with `message` 
    done(); 
    } 
}); 

app.on('error', (err) => { 
    console.log(err.message); 
}); 

app.start(); 

हुड यह पहले से ही ऊपर वर्णित लंबे मतदान तकनीक का उपयोग करता है के तहत: इसकी मदद से आप जब संदेश संसाधित किया गया है एक समारोह है कि एक SQS संदेश प्राप्त करता है एक कॉलबैक को परिभाषित करने और कॉल करने के लिए अनुमति देता है।

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

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