2013-03-19 5 views
11

मेरे पास एक PostgreSQL डेटाबेस है। मैं क्या करना चाहता हूं, डेटाबेस में होने वाले किसी भी बदलाव (सम्मिलित, अद्यतन) का पता लगाएं और फिर एक webservice कॉल करें। मैं ये कैसे करूं?पोस्टग्रेस्क्ल - परिवर्तनों का पता लगाएं और webservice पर कॉल करें

किसी भी मदद के लिए अग्रिम धन्यवाद।

+0

अपाचे ऊंट भी प्रदान करता है एक PostgresSQL [परिवहन] (http://camel.apache.org/transport.html)। आप [जावाडीएसएल] (http://camel.apache.org/java-dsl.html) का उपयोग करके एक मार्ग बना सकते हैं। नोटिफ़ाई के साथ संयोजन में, यह काम कर सकता है। – koppor

+0

संबंधित प्रश्न [जावा एप्लिकेशन में पोस्टग्रेज़ परिवर्तनों को सूचित करना] (http://stackoverflow.com/q/18126178/873282) – koppor

उत्तर

8

आप चलाता उपयोग करने के लिए सक्षम होना चाहिए और listen/notify functionality in PostgreSQL कुछ इस तरह प्राप्त करने के लिए:

  1. सम्मिलित/अपडेट करने का एक सेट/एक अधिसूचना घटना बनाने के लिए जब भी अपनी तालिका में कुछ भी परिवर्तन, उपयोग कर बनाई गई triggers हटाना/पेलोड के रूप में परिवर्तित/हटाए गए आईडी।

  2. पृष्ठभूमि प्रक्रिया समय-समय पर अधिसूचनाओं के लिए जांचती है (here's an example using Java/JDBC), और तब वेब सेवा कॉल करने के लिए डेटाबेस से परिवर्तित रिकॉर्ड लोड करता है।

यह किसी भी तरह से एक वास्तविक समय धक्का-प्रकार प्रणाली में नहीं है, लेकिन आप डेटाबेस मतदान पर अधिसूचना घटनाओं वेब सेवा कॉल को गति प्रदान करने के लिए है। हालांकि यह चाल चल जाएगा। PostgreSQL साथ

+1

जावा क्लाइंट नोटिफ़िकेशन के लिए क्लाइंट-साइड-केवल मतदान कर सकते हैं यदि वे SSL का उपयोग नहीं करते हैं। Http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/PGConnection.html#getNotifications() देखें। यदि आप एसएसएल का उपयोग कर रहे हैं तो पीजीजेडीबीसी अधिसूचनाओं को असीमित रूप से प्राप्त नहीं कर सकता है और आपको खाली क्वेरी या 'चयन 1;' भेजकर मतदान करना होगा। यदि आप क्लाइंट-साइड मतदान का उपयोग कर रहे हैं तो आप काफी जल्दी मतदान कर सकते हैं और यह काफी वास्तविक समय है। यह अधिकांश भाषा के डेटाबेस ड्राइवरों में काम करता है, न केवल पीजीजेडीबीसी। –

+0

बीटीडब्लू, 'लिस्टेन' और 'नोटिफ़ी' का उपयोग करके निश्चित रूप से सही दृष्टिकोण है। डेटाबेस के अंदर सीधे वेब सेवाओं को कॉल करने के लिए 'plpythonu',' plperlu', आदि ट्रिगर का उपयोग करना संभव है लेकिन (ए) यह लेनदेन नहीं है और (बी) यह आपके डेटाबेस के प्रदर्शन में भयानक चीजें करेगा, खासकर अगर वेब सेवा धीमी है या अनुत्तरदायी हो जाती है। –

+0

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

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