2012-04-29 18 views

उत्तर

11

http://eaipatterns.com/

आमतौर पर, एक सेवा उत्प्रेरक एक स्थानीय सेवा शुरू करने, इस तरीके से कि सेवा नहीं जानता है यह एक संदेश प्रणाली से लागू किया जा रहा है प्रयोग किया जाता है।

एक गेटवे आमतौर पर संदेश प्रणाली के लिए एक प्रविष्टि या निकास बिंदु है।

+0

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

+8

चलो पैटर्न के वसंत एकीकरण के कार्यान्वयन के संदर्भ में बात करते हैं। एक <सेवा-सक्रियकर्ता /> एक संदेश प्राप्त करता है और एक विधि को आमंत्रित करता है, आमतौर पर एक विधि पैरामीटर के साथ जो संदेश का पेलोड होता है; यदि विधि शून्य हो जाती है तो विधि वापस आने पर और कुछ नहीं करना चाहिए। अगर यह कुछ ऑब्जेक्ट देता है, तो यह नया संदेश पेलोड बन जाता है और संदेश आउटपुट चैनल को भेजा जाता है। वसंत एकीकरण में, दो प्रकार के गेटवे हैं। मैसेजिंग गेटवे एक कार्यान्वयन है जो जावा एप्लिकेशन को मैसेजिंग प्रवाह का आह्वान करने की अनुमति देता है; पैरामीटर आमतौर पर पेलोड बन जाता है। –

+4

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

1

मेरे लिए गेटवे का उपयोग एक अमूर्त बनाने के लिए किया जाता है और एक या अधिक बैक-एंड सेवाओं के लिए सामान्यीकृत एपीआई प्रदान करता है। E.g आपके पास 5 प्रदाता हैं जो आपके साथ इंटरफ़ेस करने के लिए विभिन्न तरीकों का उपयोग कर रहे हैं (SOAP, REST, XML/http, जो भी हो), लेकिन आपका ग्राहक डेटा प्राप्त करने के लिए केवल एक ही तरीका चाहता है (जेसन/आरईएसटी कहता है)। गेटवे आपके क्लाइंट को प्रतिक्रिया देने के लिए जेसन को बैकएंड प्रतिक्रिया को परिवर्तित करने के बाद, अपने क्लाइंट के साथ जेसन अनुरोध को अपने क्लाइंट के रूप में परिवर्तित कर देगा और सही बैकएंड में बदल देगा।

सेवा सक्रियकर्ता आने वाले संदेश पर ट्रिगर के रूप में अधिक कार्य करता है। मान लें कि आपका एक्टिवेटर आने वाले संदेश के लिए डेटाबेस को परागित करता है और फिर जब स्थिति "सक्रियण" को पूरा करती है तो यह अंतर्निहित सेवा को कॉल करती है।

Info for gateway here.

Info for Activator here.

6

सेवा उत्प्रेरक एक वस्तु जहां आवेदन डेवलपर कार्यान्वयन प्रदान करता है पर एक प्रणाली को बुलाती है। स्प्रिंग इंटीग्रेशन इनपुट चैनल से संदेशों के साथ विधि को कॉल करने और परिणामों को कुछ आउटपुट चैनल पर बंद करने का ख्याल रखता है। आवेदन-प्रदान कोड कुछ मनमाना काम कर सकता है।

गेटवे के लिए एप्लिकेशन डेवलपर केवल एक इंटरफ़ेस प्रदान करता है, इसका कार्यान्वयन स्प्रिंग द्वारा प्रदान किया जाता है।

वसंत एकीकरण दस्तावेज के लिए एक परिशिष्ट में Cafe example शामिल है, जहां बरिस्ता एक सेवा सक्रियकर्ता के माध्यम से एक सेवा है, और कैफे एक प्रवेश द्वार है।

आवेदन के मुख्य विधि वसंत आवेदन संदर्भ से एक कैफे वस्तु को देखता है और placeOrder कहता है, उस पर, एक तर्क के रूप में एक आदेश पारित करने:

public static void main(String[] args) { 
     AbstractApplicationContext context = null; 
     if (args.length > 0) { 
      context = new FileSystemXmlApplicationContext(args); 
     } 
     else { 
      context = new ClassPathXmlApplicationContext(
      "cafeDemo.xml", CafeDemo.class); 
     } 
     Cafe cafe = (Cafe) context.getBean("cafe"); 
     for (int i = 1; i <= 100; i++) { 
      Order order = new Order(i); 
      order.addItem(DrinkType.LATTE, 2, false); 
      order.addItem(DrinkType.MOCHA, 3, true); 
      cafe.placeOrder(order); 
     } 
    } 

कैफे एक अंतरफलक है कि आवेदन नहीं करता है के लिए एक कार्यान्वयन प्रदान करते हैं। वसंत एक कार्यान्वयन उत्पन्न करता है जो "ऑर्डर" नामक इनपुट चैनल के नीचे ऑर्डर भेजता है।

पाइपलाइन के नीचे, दो सेवा-सक्रियकर्ता हैं जिनके पास बरिस्ता का संदर्भ है। बरिस्ता एक POJO इस तरह पीने-पिलाने के बनाने के लिए कोड है कि:

public Drink prepareHotDrink(OrderItem orderItem) { 
     try { 
      Thread.sleep(this.hotDrinkDelay); 
      System.out.println(Thread.currentThread().getName() 
        + " prepared hot drink #" + hotDrinkCounter.incrementAndGet() 
        + " for order #" + orderItem.getOrder().getNumber() 
        + ": " + orderItem); 
      return new Drink(orderItem.getOrder().getNumber(), 
        orderItem.getDrinkType(), 
        orderItem.isIced(), orderItem.getShots()); 
     } 
     catch (InterruptedException e) { 
      Thread.currentThread().interrupt(); 
      return null; 
     } 
    } 

बरिस्ता सेवा-उत्प्रेरक के इनपुट चैनल से पेय आदेश प्राप्त करता है और एक विधि इस पर कहा जाता है कि एक पी देता है, जो नीचे भेजा जाता है सेवा-सक्रियकर्ता का आउटपुट चैनल, "तैयार ड्रिंक्स"।