2015-12-14 5 views
7

मैंने एक सिम्फनी एप्लिकेशन में RabbitMQ एकीकरण पर कई (महान) लेख पढ़े हैं।सिम्फनी: क्या मुझे rabbitmq जोड़ना चाहिए: उपभोक्ता कमांड crontab?

RabbitMqBundle यह बहुत आसान यह कृतघ्न के लिए बनाता है, और यह इस तरह एक कतार के संदेशों का उपयोग करने के लिए सुविधाजनक rabbitmq:consumer आदेश प्रदान करता है:

app/console rabbitmq:consumer -m 50 upload_picture 

मैं हालांकि एक प्रश्न है। क्या आपको यह आदेश crontab में जोड़ने की सलाह देनी चाहिए? क्या इसके बारे में कोई सर्वोत्तम प्रथा है?

+1

एक साइड नोट -एम 50 हर समय विश्वसनीय नहीं है। उदाहरण के लिए, यदि आपके पास समय-समय पर कतार में आने वाली कुछ विधियां हैं तो आपको खोए गए कनेक्शनों में समस्या होगी। यह एक लंबी निष्क्रिय अवधि के कारण होता है। कमांड काम करने के वास्तविक समय को सीमित करने के लिए बेहतर है। सभी कनेक्शन टाइमआउट इस सीमा से बंधे जा सकते हैं। उपभोक्ता 1 घंटे के लिए काम करता है और बाहर निकलता है ताकि टाइमआउट 1 घंटे 20 मिनट तक सेट किया जा सके। यह कुछ खरगोश बंडल मिस है लेकिन यह एनक्यू बंडल (--limit-time = "अब + 1 घंटा" विकल्प) में उपलब्ध है। –

उत्तर

6

आपके उपभोक्ता को चलाने के लिए और अधिक स्वीकार्य तरीका है। Supervisor और Circus जैसे टूल हैं जो इससे आपकी सहायता कर सकते हैं। this discussion देखें। लेकिन अगर आप कोई उपभोक्ता नहीं निकलते हैं तो आपके उपभोक्ता को बाहर निकलने के लिए मिल सकता है, तो आप क्रॉन का भी उपयोग कर सकते हैं। हालांकि इससे संदेश लेने में देरी हो सकती है। आप तुरंत संदेशों पर प्रतिक्रिया नहीं दे सकते। किसी भी कार्य शुरू होने से पहले उपयोगकर्ताओं को एक मिनट का इंतजार करना पड़ सकता है/मेल प्राप्त होता है। स्मृति के उपयोग संचय से बचने के

प्रयास करें:

कृपया जब एक लंबे समय के लिए अपने उपभोक्ता (या उस बात के लिए किसी भी PHP कोड) चल रहा इन बातों का ले। उन्हें कभी भी साफ़ किए बिना सरणी में शामिल न रखें। इसका मतलब यह है कि आपको मोनोलॉग में फिंगर्सक्रॉस्ड हैंडलर का उपयोग नहीं करना चाहिए क्योंकि यह लॉग संदेशों का बफर रखता है। एक अनुरोध के लिए ठीक है, डीबग संदेशों के एक दिन के लिए नहीं।

जब भी आप सावधान रहें, तो PHP स्मृति को रिसाव कर सकता है। आप क्या कह सकते हैं, PHP ... (यह वास्तव में एक पकड़ हो सकता है) मेरी स्थिति में मेरे पास एक cronjob स्थापित है जो हर रात श्रमिकों को पुनरारंभ करता है, लेकिन सिद्धांत रूप में उपभोक्ताओं को स्मृति से बाहर होने से एक महीने पहले चला सकता है।

+5

आपके उत्तर के लिए धन्यवाद। यह वही है जो मैं खोज रहा था क्योंकि सिम्फनी ट्यूटोरियल्स के लिए खरगोश एमक्यू में इसका कभी उल्लेख नहीं किया गया था। ऐसा लगता है कि RabbitMQBundle के लिए स्वत: सुपरवाइज़र्ड कॉन्फ़िगरेशन को संभालने के लिए एक दिलचस्प सिम्फनी बंडल है: https://github.com/Phobetor/rabbitmq-supervisor-bundle –

+1

"इस चर्चा" के तहत समस्या लिंक बंद है। – Cassiano

+1

मैं पहली टिप्पणी में उल्लिखित बंडल से बचूंगा, इसे वास्तविक विश्वसनीयता के मुद्दे मिल गए हैं। –

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