घटना-संचालित वास्तुकला

From Vigyanwiki
Revision as of 14:26, 2 March 2023 by alpha>Indicwiki (Created page with "{{Short description|Software architecture model}} इवेंट-ड्रिवेन आर्किटेक्चर (EDA) एक सॉफ़्टवेयर वा...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

इवेंट-ड्रिवेन आर्किटेक्चर (EDA) एक सॉफ़्टवेयर वास्तुशिल्प प्रतिमान है जो घटना (कंप्यूटिंग) के उत्पादन, पहचान, खपत और प्रतिक्रिया को बढ़ावा देता है।

सिंहावलोकन

एक घटना को राज्य (कंप्यूटर विज्ञान) में एक महत्वपूर्ण परिवर्तन के रूप में परिभाषित किया जा सकता है।[1] उदाहरण के लिए, जब कोई उपभोक्ता कार खरीदता है, तो कार की स्थिति बिक्री के लिए से बेची गई में बदल जाती है। एक कार डीलर का सिस्टम आर्किटेक्चर इस स्थिति परिवर्तन को एक घटना के रूप में मान सकता है जिसकी घटना को आर्किटेक्चर के भीतर अन्य अनुप्रयोगों के लिए जाना जा सकता है। एक औपचारिक दृष्टिकोण से, जो उत्पादित, प्रकाशित, प्रचारित, पता लगाया या उपभोग किया जाता है, वह एक (आमतौर पर अतुल्यकालिक) संदेश होता है, जिसे इवेंट नोटिफिकेशन कहा जाता है, न कि स्वयं घटना, जो राज्य परिवर्तन है जो संदेश उत्सर्जन को ट्रिगर करता है। घटनाएँ यात्रा नहीं करतीं, वे बस घटित होती हैं। हालाँकि, घटना शब्द का उपयोग अक्सर अधिसूचना संदेश को निरूपित करने के लिए लक्षणालंकार का उपयोग किया जाता है, जिससे कुछ भ्रम हो सकता है। यह इवेंट-संचालित आर्किटेक्चर के कारण अक्सर 'संदेश-संचालित आर्किटेक्चर' के ऊपर डिज़ाइन किया जा रहा है, जहां इस तरह के संचार पैटर्न में प्रत्येक संचार को कैसे संभाला जाना चाहिए, यह अंतर करने के लिए इनपुट में से एक को टेक्स्ट-ओनली, संदेश की आवश्यकता होती है।

यह वास्तु पैटर्न उन अनुप्रयोगों और प्रणालियों के डिजाइन और कार्यान्वयन द्वारा लागू किया जा सकता है जो ढीले युग्मन और सेवा (सिस्टम आर्किटेक्चर) के बीच घटनाओं को प्रसारित करते हैं। एक घटना-संचालित प्रणाली में आम तौर पर घटना उत्सर्जक (या एजेंट), घटना उपभोक्ता (या डूब), और घटना चैनल शामिल होते हैं। एमिटर्स की घटनाओं का पता लगाने, इकट्ठा करने और स्थानांतरित करने की जिम्मेदारी है। एक घटना उत्सर्जक घटना के उपभोक्ताओं को नहीं जानता है, यह भी नहीं जानता कि उपभोक्ता मौजूद है या नहीं, और यदि यह मौजूद है, तो यह नहीं जानता कि घटना का उपयोग कैसे किया जाता है या आगे संसाधित किया जाता है। किसी घटना के प्रस्तुत होते ही प्रतिक्रिया लागू करने की जिम्मेदारी सिंक की होती है। प्रतिक्रिया पूरी तरह से सिंक द्वारा प्रदान की जा सकती है या नहीं भी हो सकती है। उदाहरण के लिए, सिंक के पास ईवेंट को किसी अन्य घटक को फ़िल्टर करने, बदलने और अग्रेषित करने की ज़िम्मेदारी हो सकती है या यह इस तरह की घटना के लिए स्वयं निहित प्रतिक्रिया प्रदान कर सकता है। ईवेंट चैनल ऐसे वाहक होते हैं जिनमें ईवेंट उत्सर्जकों से ईवेंट उपभोक्ताओं तक ईवेंट प्रसारित किए जाते हैं। घटनाओं के सही वितरण का ज्ञान केवल घटना चैनल के भीतर ही मौजूद है।[citation needed] ईवेंट चैनलों का भौतिक कार्यान्वयन पारंपरिक घटकों जैसे संदेश-उन्मुख मिडलवेयर या पॉइंट-टू-पॉइंट संचार पर आधारित हो सकता है जिसके लिए अधिक उपयुक्त की आवश्यकता हो सकती है transactional executive framework[clarify].

एक घटना-संचालित वास्तुकला के आसपास बिल्डिंग सिस्टम वितरित कंप्यूटिंग मॉडल में क्षैतिज मापनीयता को सरल करता है और उन्हें विफलता के प्रति अधिक लचीला बनाता है। ऐसा इसलिए है क्योंकि उच्च-उपलब्धता के लिए कई समांतर स्नैपशॉट में एप्लिकेशन स्थिति की प्रतिलिपि बनाई जा सकती है।[2] नई घटनाओं को कहीं भी शुरू किया जा सकता है, लेकिन इससे भी महत्वपूर्ण बात यह है कि डेटा स्टोर के नेटवर्क में आने पर प्रत्येक को अपडेट करते हुए प्रसारित किया जाता है। अतिरिक्त नोड्स जोड़ना भी तुच्छ हो जाता है: आप बस आवेदन की स्थिति की एक प्रति ले सकते हैं, इसे घटनाओं की एक धारा खिला सकते हैं और इसके साथ चल सकते हैं।[3] इवेंट-संचालित आर्किटेक्चर सेवा-उन्मुख आर्किटेक्चर (SOA) का पूरक हो सकता है क्योंकि सेवाओं को आने वाली घटनाओं पर ट्रिगर द्वारा सक्रिय किया जा सकता है।[4][5] यह प्रतिमान विशेष रूप से तब उपयोगी होता है जब सिंक कोई प्रदान नहीं करता है self-contained executive[clarify].

घटना-संचालित SOA|SOA 2.0 उन निहितार्थों को विकसित करता है जो SOA और EDA आर्किटेक्चर एक नए ईवेंट पैटर्न बनाने के लिए पहले के अज्ञात कारण संबंधों का लाभ उठाकर एक समृद्ध, अधिक मजबूत स्तर प्रदान करते हैं।[vague] यह नया व्यापारिक सूचना पैटर्न आगे स्वायत्त मानव या स्वचालित प्रसंस्करण को ट्रिगर करता है जो मूल्य-वर्धित जानकारी को मान्यता प्राप्त पैटर्न में इंजेक्ट करके उद्यम के लिए घातीय मूल्य जोड़ता है जो पहले प्राप्त नहीं किया जा सकता था।[vague]

घटना संरचना

एक ईवेंट को दो भागों में बनाया जा सकता है, इवेंट हेडर और इवेंट बॉडी। इवेंट हेडर में इवेंट का नाम, इवेंट के लिए टाइम स्टैम्प और इवेंट के प्रकार जैसी जानकारी शामिल हो सकती है। इवेंट बॉडी पता लगाए गए राज्य परिवर्तन का विवरण प्रदान करती है। एक घटना निकाय को पैटर्न या तर्क के साथ भ्रमित नहीं होना चाहिए जो कि घटना की घटना की प्रतिक्रिया में लागू हो सकता है।

घटना प्रवाह परतें

एक घटना संचालित वास्तुकला को चार तार्किक परतों पर बनाया जा सकता है, जो एक घटना के संवेदन (यानी, एक महत्वपूर्ण अस्थायी स्थिति या तथ्य) से शुरू होती है, एक घटना संरचना के रूप में इसके तकनीकी प्रतिनिधित्व के निर्माण के लिए आगे बढ़ती है और एक गैर के साथ समाप्त होती है। उस घटना पर प्रतिक्रियाओं का खाली सेट।[6]


इवेंट प्रोड्यूसर

पहली तार्किक परत घटना निर्माता है, जो एक तथ्य को समझती है और एक घटना संदेश के रूप में उस तथ्य का प्रतिनिधित्व करती है। एक उदाहरण के रूप में, एक इवेंट प्रोड्यूसर एक ईमेल क्लाइंट, एक ई-कॉमर्स सिस्टम, एक मॉनिटरिंग एजेंट या किसी प्रकार का भौतिक सेंसर हो सकता है।

इस तरह के विविध डेटा स्रोतों से एकत्र किए गए डेटा को मूल्यांकन के लिए डेटा के एकल मानकीकृत रूप में परिवर्तित करना इस पहली तार्किक परत के डिजाइन और कार्यान्वयन में एक महत्वपूर्ण कार्य है।[6]हालाँकि, यह देखते हुए कि एक घटना एक जोरदार घोषणात्मक ढांचा है, किसी भी सूचनात्मक संचालन को आसानी से लागू किया जा सकता है, इस प्रकार उच्च स्तर के मानकीकरण की आवश्यकता समाप्त हो जाती है।[citation needed]

इवेंट चैनल

यह दूसरी तार्किक परत है। एक ईवेंट चैनल एक इवेंट जेनरेटर से ईवेंट इंजन में एकत्रित की गई जानकारी को प्रसारित करने का एक तंत्र है[6]या डूबो। यह एक टीसीपी/आईपी कनेक्शन, या किसी भी प्रकार की इनपुट फ़ाइल (फ्लैट, एक्सएमएल प्रारूप, ई-मेल, आदि) हो सकता है। एक ही समय में कई ईवेंट चैनल खोले जा सकते हैं। आमतौर पर, क्योंकि इवेंट प्रोसेसिंग इंजन को उन्हें लगभग वास्तविक समय में प्रोसेस करना होता है, इवेंट चैनल एसिंक्रोनस रूप से पढ़े जाएंगे। घटनाओं को एक कतार में संग्रहीत किया जाता है, बाद में इवेंट प्रोसेसिंग इंजन द्वारा संसाधित किए जाने की प्रतीक्षा की जाती है।

इवेंट प्रोसेसिंग इंजन

इवेंट प्रोसेसिंग इंजन एक तार्किक परत है जो किसी घटना की पहचान करने और फिर उचित प्रतिक्रिया का चयन करने और निष्पादित करने के लिए जिम्मेदार है। यह कई दावों को भी ट्रिगर कर सकता है। उदाहरण के लिए, यदि इवेंट प्रोसेसिंग इंजन में आने वाली घटना स्टॉक में कम उत्पाद आईडी है, तो यह "ऑर्डर उत्पाद आईडी" और "कर्मचारियों को सूचित करें" जैसी प्रतिक्रियाओं को ट्रिगर कर सकती है।[6]


डाउनस्ट्रीम इवेंट-संचालित गतिविधि

यह तार्किक परत है जहां घटना के परिणाम दिखाए जाते हैं। यह कई अलग-अलग तरीकों और रूपों में किया जा सकता है; उदाहरण के लिए, एक ईमेल किसी को भेजा जाता है और एक एप्लिकेशन स्क्रीन पर किसी प्रकार की चेतावनी प्रदर्शित कर सकता है।[6]सिंक (ईवेंट प्रोसेसिंग इंजन) द्वारा प्रदान किए गए स्वचालन के स्तर के आधार पर डाउनस्ट्रीम गतिविधि की आवश्यकता नहीं हो सकती है।

इवेंट प्रोसेसिंग स्टाइल्स

इवेंट प्रोसेसिंग की तीन सामान्य शैलियाँ हैं: सरल, धारा और जटिल। एक परिपक्व घटना-संचालित वास्तुकला में तीन शैलियों का अक्सर एक साथ उपयोग किया जाता है।[6]


सरल घटना प्रसंस्करण

सरल घटना प्रसंस्करण उन घटनाओं से संबंधित है जो स्थिति के विशिष्ट, औसत दर्जे के परिवर्तनों से सीधे संबंधित हैं। साधारण ईवेंट प्रोसेसिंग में, एक उल्लेखनीय घटना घटित होती है जो डाउनस्ट्रीम क्रिया(ओं) को आरंभ करती है। सरल घटना प्रसंस्करण का उपयोग आमतौर पर काम के वास्तविक समय के प्रवाह को चलाने के लिए किया जाता है, जिससे अंतराल समय और लागत कम हो जाती है।[6]

उदाहरण के लिए, टायर के दबाव या परिवेश के तापमान में परिवर्तन का पता लगाने वाले सेंसर द्वारा साधारण घटनाओं का निर्माण किया जा सकता है। कार का टायर गलत दबाव सेंसर से एक साधारण घटना उत्पन्न करेगा जो चालक को टायर की स्थिति के बारे में सलाह देने वाली पीली रोशनी को ट्रिगर करेगा।

इवेंट स्ट्रीम प्रोसेसिंग

इवेंट स्ट्रीम प्रोसेसिंग (ईएसपी) में सामान्य और उल्लेखनीय दोनों तरह की घटनाएं होती हैं। सामान्य घटनाओं (आदेशों, आरएफआईडी प्रसारण) को उल्लेखनीयता के लिए जांचा जाता है और सूचना ग्राहकों को प्रवाहित किया जाता है। इवेंट स्ट्रीम प्रोसेसिंग का उपयोग आमतौर पर उद्यम में और उसके आसपास सूचना के वास्तविक समय के प्रवाह को चलाने के लिए किया जाता है, जो समय पर निर्णय लेने में सक्षम बनाता है।[6]


जटिल घटना प्रसंस्करण

कॉम्प्लेक्स इवेंट प्रोसेसिंग (सीईपी) सरल और सामान्य घटनाओं के पैटर्न को अनुमान लगाने की अनुमति देता है कि एक जटिल घटना हुई है। जटिल घटना प्रसंस्करण घटनाओं के संगम का मूल्यांकन करता है और फिर कार्रवाई करता है। घटनाएँ (उल्लेखनीय या साधारण) घटना प्रकारों को पार कर सकती हैं और लंबी अवधि में घटित हो सकती हैं। घटना सहसंबंध कारण, लौकिक या स्थानिक हो सकता है। सीईपी में परिष्कृत ईवेंट दुभाषियों, इवेंट पैटर्न की परिभाषा और मिलान, और सहसंबंध तकनीकों के रोजगार की आवश्यकता होती है। सीईपी का उपयोग आमतौर पर व्यावसायिक विसंगतियों, खतरों और अवसरों का पता लगाने और उनका जवाब देने के लिए किया जाता है।[6]


ऑनलाइन इवेंट प्रोसेसिंग

OLEP (OLEP) जटिल घटनाओं को संसाधित करने और लगातार डेटा को प्रबंधित करने के लिए अतुल्यकालिक वितरित ईवेंट-लॉग का उपयोग करता है।[7] ओएलईपी विषम प्रणालियों में एक जटिल परिदृश्य की संबंधित घटनाओं को मज़बूती से बनाने की अनुमति देता है। यह उच्च मापनीयता के साथ बहुत लचीले वितरण पैटर्न को सक्षम बनाता है और मजबूत स्थिरता प्रदान करता है। हालाँकि, यह प्रसंस्करण समय के लिए ऊपरी सीमा की गारंटी नहीं दे सकता है।

अत्यधिक ढीला युग्मन और अच्छी तरह से वितरित

एक घटना संचालित वास्तुकला अत्यंत शिथिल युग्मित और अच्छी तरह से वितरित है। इस वास्तुकला का महान वितरण मौजूद है क्योंकि एक घटना लगभग कुछ भी हो सकती है और लगभग कहीं भी मौजूद हो सकती है। वास्तुकला अत्यंत शिथिल युग्मित है क्योंकि घटना स्वयं इसके कारण के परिणामों के बारे में नहीं जानती है। उदा. यदि हमारे पास एक अलार्म सिस्टम है जो सामने का दरवाजा खुलने पर सूचना रिकॉर्ड करता है, तो दरवाजा खुद नहीं जानता है कि दरवाजा खुलने पर अलार्म सिस्टम सूचना जोड़ देगा, बस दरवाजा खोल दिया गया है।[6]


सिमेंटिक कपलिंग और आगे का शोध

घटना संचालित आर्किटेक्चर में स्थान, समय और तुल्यकालन के भीतर ढीला युग्मन है, सूचना विनिमय और वितरित वर्कफ़्लोज़ के लिए एक स्केलेबल बुनियादी ढांचा प्रदान करता है। हालांकि, इवेंट सब्सक्रिप्शन और पैटर्न के माध्यम से इवेंट-आर्किटेक्चर कसकर युग्मित हैं, अंतर्निहित इवेंट स्कीमा और मूल्यों के शब्दों के लिए। स्मार्ट शहरों और सेंसर वेब जैसे बड़े और खुले परिनियोजन में घटनाओं की सिमेंटिक विषमता का उच्च स्तर इवेंट-आधारित सिस्टम को विकसित करने और बनाए रखने में मुश्किल बनाता है। घटना-आधारित प्रणालियों के भीतर सिमेंटिक कपलिंग को संबोधित करने के लिए घटनाओं के अनुमानित सिमेंटिक मिलान का उपयोग अनुसंधान का एक सक्रिय क्षेत्र है।[8]


कार्यान्वयन और उदाहरण

जावा स्विंग

जावा (प्रोग्रामिंग भाषा) स्विंग (जावा) एपीआई एक इवेंट संचालित आर्किटेक्चर पर आधारित है। यह यूजर इंटरफेस से संबंधित घटकों और कार्यक्षमता प्रदान करने के लिए स्विंग के पीछे की प्रेरणा के साथ विशेष रूप से अच्छी तरह से काम करता है। एपीआई एक नामकरण सम्मेलन का उपयोग करता है (उदाहरण के लिए ActionListener और ActionEvent ) घटनाओं की चिंताओं को जोड़ने और व्यवस्थित करने के लिए। एक वर्ग जिसे किसी विशेष घटना के बारे में पता होना चाहिए, बस उपयुक्त श्रोता को लागू करता है, विरासत में मिली विधियों को ओवरराइड करता है, और फिर उस वस्तु में जोड़ा जाता है जो घटना को सक्रिय करता है। एक बहुत ही सरल उदाहरण हो सकता है:

public class FooPanel extends JPanel implements ActionListener {
    public FooPanel() {
        super();

        JButton btn = new JButton("Click Me!");
        btn.addActionListener(this);

        this.add(btn);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        System.out.println("Button has been clicked!");
    }
}

वैकल्पिक रूप से, एक अन्य कार्यान्वयन विकल्प श्रोता को ऑब्जेक्ट में क्लास (कंप्यूटर प्रोग्रामिंग) के रूप में जोड़ना है # अनाम और इस प्रकार लैम्ब्डा नोटेशन (जावा 1.8 के बाद से) का उपयोग करना है। नीचे एक उदाहरण है।

public class FooPanel extends JPanel {
    public FooPanel() {
        super();

        JButton btn = new JButton("Click Me!");
        btn.addActionListener(ae -> System.out.println("Button has been clicked!"));
        this.add(btn);
    }
}


जावास्क्रिप्ट

(() => {
  'use strict';

  class EventEmitter {
    constructor() {
      this.events = new Map();
    }

    on(event, listener) {
      if (typeof listener !== 'function') {
        throw new TypeError('The listener must be a function');
      }
      let listeners = this.events.get(event);
      if (!listeners) {
        listeners = new Set();
        this.events.set(event, listeners); 
      }
      listeners.add(listener);
      return this;
    }

    off(event, listener) {
      if (!arguments.length) {
        this.events.clear();
      } else if (arguments.length === 1) {
        this.events.delete(event);
      } else {
        const listeners = this.events.get(event);
        if (listeners) {
          listeners.delete(listener);
        }
      }
      return this;
    }

    emit(event, ...args) {
      const listeners = this.events.get(event);
      if (listeners) {
        for (let listener of listeners) {
          listener.apply(this, args);
        }
      }
      return this;
    }
  }

  this.EventEmitter = EventEmitter;
})();

उपयोग:

const events = new EventEmitter();
events.on('foo', () => { console.log('foo'); });
events.emit('foo'); // Prints "foo"
events.off('foo');
events.emit('foo'); // Nothing will happen


वस्तु पास्कल

घटनाएँ ऑब्जेक्ट पास्कल भाषा के मूलभूत तत्वों में से एक हैं। यूनी-कास्ट मॉडल (वन-टू-वन) का उपयोग यहां किया जाता है, यानी प्रेषक केवल एक प्राप्तकर्ता को सूचना भेजता है। इस सीमा का लाभ यह है कि इसके लिए किसी विशेष ईवेंट श्रोता की आवश्यकता नहीं होती है। घटना स्वयं किसी अन्य वस्तु में एक विधि के लिए सूचक है। यदि पॉइंटर खाली नहीं है, तो जब कोई ईवेंट होता है, तो ईवेंट हैंडलर को कॉल किया जाता है। घटनाओं का उपयोग आमतौर पर उन कक्षाओं में किया जाता है जो जीयूआई का समर्थन करते हैं। हालाँकि, यह घटनाओं के लिए आवेदन का एकमात्र क्षेत्र नहीं है। निम्नलिखित कोड घटनाओं का उपयोग करने का एक उदाहरण है:

unit MyCustomClass;  

interface

uses
  Classes;
  
type
  {definition of your own event}
  TAccidentEvent = procedure(Sender: TObject; const AValue: Integer) of object;

  TMyCustomObject = class(TObject)
  private
    FData: Integer;              // an example of a simple field in a class
    FOnAccident: TAccidentEvent; // event - reference to a method in some object
    FOnChange: TNotifyEvent;     // event - reference to a method in some object 
    procedure SetData(Value: Integer); // a method that sets the value of a field in the class 
  protected
    procedure DoAccident(const AValue: Integer); virtual; // a method that generates an event based on your own definition 
    procedure DoChange; // a method that generates an event based on a definition from the VCL library 
  public
    constructor Create; virtual;   // class constructor 
    destructor Destroy; override;  // class destructor
  published
    property Data: TAccidentEvent read FData write SetData; // declaration of a property in a class
    property OnAccident: TAccidentEvent read FOnAccident write FOnAccident; // exposing the event outside the class
    property OnChange: TNotifyEvent read FOnChange write FOnChange;         // exposing the event outside the class
    procedure MultiplyBy(const AValue: Integer);  // a method that uses its own definition of the event
  end;
  
implementation

constructor TMyCustomObject.Create;
begin
  FData := 0;
end;

destructor TMyCustomObject.Destroy;
begin
  FData := 0;
  inherited Destroy;
end;

procedure TMyCustomObject.DoAccident(const AValue: Integer);
begin
  if Assigned(FOnAccident)
   then FOnAccident(Self, AValue);
end;

procedure TMyCustomObject.DoChange;
begin
  if Assigned(FOnChange)
   then FOnChange(Self);
end;

procedure TMyCustomObject.MultiplyBy(const AValue: Integer);
begin
  FData := FData * AValue;
  if FData > 1000000
   then DoAccident(FData);
end;

procedure TMyCustomObject.SetData(Value: Integer);
begin
  if FData <> Value
   then
    begin
     FData := Value;
     DoChange;
    end;
end.

निर्मित वर्ग का उपयोग इस प्रकार किया जा सकता है:

...
procedure TMyForm.ShowCustomInfo(Sender: TObject);
begin
  if Sender is TMyCustomObject
   then ShowMessage('Data has changed.');
end;

procedure TMyForm.PerformAcident(Sender: TObject; const AValue: Integer);
begin
  if Sender is TMyCustomObject
   then ShowMessage('The data has exceeded 1000000! New value is: ' + AValue.ToString);
end;
...
{declaring a variable that is an object of the specified class}
var
  LMyObject: TMyCustomObject; 
...
{creation of the object}
LMyObject := TMyCustomObject.Create;
...
{assigning a methods to an events}
LMyObject.OnChange := MyForm.ShowCustomInfo;
LMyObject.OnAccident := MyForm.PerformAcident;
...
{removing an object when it is no longer needed}
LMyObject.Free; 
...


यह भी देखें

लेख

संदर्भ

  1. K. Mani Chandy Event-driven Applications: Costs, Benefits and Design Approaches, California Institute of Technology, 2006
  2. Martin Fowler, Event Sourcing, December, 2005
  3. Martin Fowler, Parallel Model, December, 2005
  4. Hanson, Jeff (January 31, 2005). "SOA में घटना-संचालित सेवाएं". JavaWorld. Retrieved 2020-07-21.
  5. Sliwa, Carol (May 12, 2003). "घटना-संचालित वास्तुकला व्यापक रूप से अपनाने के लिए तैयार है". Computerworld. Retrieved 2020-07-21.
  6. 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 Brenda M. Michelson, Event-Driven Architecture Overview, Patricia Seybold Group, February 2, 2006
  7. "ऑनलाइन इवेंट प्रोसेसिंग - एसीएम कतार". queue.acm.org. Retrieved 2019-05-30.
  8. Hasan, Souleiman, Sean O’Riain, and Edward Curry. 2012. “Approximate Semantic Matching of Heterogeneous Events.” In 6th ACM International Conference on Distributed Event-Based Systems (DEBS 2012), 252–263. Berlin, Germany: ACM. “DOI”.


बाहरी संबंध