संदेश कतार के रूप में सुनें / सूचित करें


17

क्या किसी चैनल को संदेश देने के लिए Postgres Listen / Notify सुविधा का उपयोग करने का कोई तरीका है और केवल एक श्रोता इस संदेश का उपभोग करता है?

इसका उद्देश्य यह है कि मेरे पास कई 'कार्यकर्ता' ऐप हैं जो सभी एक ही पोस्टग्रेज चैनल को सुनते हैं। लेकिन मैं केवल अधिसूचना चैनल के माध्यम से प्राप्त संदेश के अनुसार काम करना चाहता हूं।

यदि Postgres में Listen / Notify सही फ़ीचर नहीं है, तो क्या एक अलग सुविधा है जिसका मुझे उपयोग करना चाहिए?

आदर्श रूप से मैं बिना किसी अतिरिक्त एक्सटेंशन का उपयोग किए ऐसा करना चाहूंगा।

जवाबों:


24

PostgreSQL प्रलेखन केNOTIFY अनुसार :

NOTIFY कमांड प्रत्येक क्लाइंट अनुप्रयोग के लिए वैकल्पिक "पेलोड" स्ट्रिंग के साथ एक अधिसूचना घटना भेजता है जो पहले मौजूदा डेटाबेस में निर्दिष्ट चैनल नाम के लिए LISTEN चैनल निष्पादित करता है। सभी उपयोगकर्ताओं को सूचनाएं दिखाई देती हैं

(जोर मेरा)

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

आलेख में दर्शाया गया रणनीति पोस्टग्रेएसक्यूएल 9.5 में एसकेआईपी लॉकड के लिए क्या है? शायद PostgreSQL के भीतर एक संदेश कतार को लागू करने का सबसे सुरक्षित / आसान तरीका है । "कैसे SKIP लॉक्ड मदद करता है" भाग पर विशेष ध्यान दें। ध्यान से पढ़ें उनके एक करैत:

RDBMS में कार्यान्वित एक कतार कभी भी तेजी से समर्पित कतारबद्ध प्रणाली के प्रदर्शन से मेल नहीं खाएगी, यहां तक ​​कि एक ही जो परमाणुता और स्थायित्व की गारंटी PostgreSQL के रूप में देता है। SKIP लॉक्ड का उपयोग करना मौजूदा इन-डेटाबेस दृष्टिकोणों से बेहतर है, लेकिन आप अभी भी एक समर्पित और अत्यधिक अनुकूलित बाहरी कतार इंजन का उपयोग करके तेजी से आगे बढ़ेंगे।

यह विशेष रूप से महत्वपूर्ण है यदि कतार की मात्रा अधिक है।


1
काश मैं उस लेख के लेखक को एक पुरस्कार दे पाता। तो बेहद मददगार।
वाइल्डकार्ड 1

3

मैंने कुछ समय पहले अच्छी सफलता के साथ ऐसा किया था, मैंने RabbitMQ और इस प्लगइन https://github.com/gmr/pgsql-listen-exchange का उपयोग किया

मूल रूप से RabbitMQ PostgreSQL से जुड़ता है और अधिसूचित घटना के लिए सुनता है, तो आप उस संदेश को आवश्यकतानुसार कई कतारों में एकत्रित करने के लिए RabbitMQ का उपयोग कर सकते हैं और एक ऐप का उपयोग कर प्रत्येक कतार में प्रवेश कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.