Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

मेरे डोमेन में उठाए गए ईवेंट से RedMQ में हैंडलर कैसे सेट करें?

सर्विसस्टैक में एमक्यू, आरईएसटी, एचटीएमएल या एसओएपी सेवाओं के लिए बनाई गई सेवाओं के बीच कोई भेद नहीं है, वे वही बात हैं। यानी वे प्रत्येक एक अनुरोध डीटीओ स्वीकार करते हैं और वैकल्पिक रूप से एक प्रतिक्रिया डीटीओ लौटाते हैं और वही सेवा किसी भी एंडपॉइंट या प्रारूप, जैसे एचटीएमएल, आरईएसटी, एसओएपी या एमक्यू से कॉल को संभाल सकती है।

एमक्यू कैसे फिट बैठता है यह देखने के लिए सर्विसस्टैक के आर्किटेक्चर आरेख को देखें।

सीमाएं

केवल वही चीज़ें जिन्हें आपको ध्यान में रखने की आवश्यकता है वे हैं:

  • SOAP की तरह, MQ केवल 1 क्रिया का समर्थन करता है इसलिए आपके तरीकों का नाम पोस्ट होना चाहिए या कोई भी
  • केवल एक्शन फ़िल्टर निष्पादित किए जाते हैं (अर्थात वैश्विक या विशेषता फ़िल्टर नहीं)
  • आपको IHttpRequest के स्थान पर MqRequest और MqResponse स्टब्स मिलते हैं , IHttpResponse . आप अभी भी .Items . का उपयोग कर सकते हैं अनुरोध पाइपलाइन के माध्यम से डेटा पास करने के लिए लेकिन कुकीज़ या HTTP शीर्षलेख सेट करने जैसी कोई HTTP क्रियाएं सौम्य हैं

Redis MQ होस्ट को कॉन्फ़िगर करना

एमक्यू होस्ट स्वयं को बाकी सर्विसस्टैक ढांचे से पूरी तरह से अलग कर दिया गया है, जो नहीं जानता कि एमक्यू मौजूद है जब तक कि आप स्वयं सर्विसस्टैक में संदेश पास नहीं करते, जो आमतौर पर आपके पंजीकृत हैंडलर के अंदर किया जाता है, उदाहरण:

var redisFactory = new PooledRedisClientManager("localhost:6379");
var mqHost = new RedisMqServer(redisFactory, retryCount:2);

mqHost.RegisterHandler<Hello>(m => {
    return this.ServiceController.ExecuteMessage(m);
});

//shorter version:
//mqHost.RegisterHandler<Hello>(ServiceController.ExecuteMessage);


mqHost.Start(); //Starts listening for messages

आपके RegisterHandler<T> . में आप उस प्रकार के अनुरोध को निर्दिष्ट करते हैं जिसे आप सुनना चाहते हैं।

डिफ़ॉल्ट रूप से आप प्रत्येक संदेश के लिए केवल एक हैंडलर पंजीकृत कर सकते हैं और सर्विसस्टैक में एक अनुरोध एक ज्ञात सेवा कार्यान्वयन से जुड़ा हुआ है, एमक्यू के मामले में यह पहले मिलान करने वाले विधि हस्ताक्षर की तलाश में है:Post(Hello) और अगर यह मौजूद नहीं है तो यह फॉलबैक Any(Hello) की तलाश करता है .

प्रति संदेश कई हैंडलर स्वयं जोड़ सकते हैं

यदि आप एक से अधिक हैंडलर्स को इनवाइट करना चाहते हैं तो आपको बस अपनी List<Handler> . को बनाए रखना होगा और अनुरोध आने पर बस उन सभी को देखें और निष्पादित करें।

विभिन्न सेवाओं को कॉल करना

यदि आप एक अलग सेवा को कॉल करना चाहते हैं, तो बस इसे एक अलग अनुरोध डीटीओ में अनुवाद करें और इसके बजाय सर्विस कंट्रोलर को पास करें।

जब कोई एमक्यू अनुरोध किसी के द्वारा भेजा जाता है, जैसे:

mqClient.Publish(new Hello { Name = "Client" });

आपके हैंडलर को IMessage प्रकार के उदाहरण के साथ बुलाया जाता है जहां अनुरोध डीटीओ बॉडी में समाहित है संपत्ति। उस समय आप संदेश को त्यागना, उसकी पुष्टि करना या उसमें परिवर्तन करना चुन सकते हैं।

MQ अनुरोध किसी भी अन्य सेवा अनुरोध के समान हैं

ज्यादातर मामलों में आप आमतौर पर केवल सर्विसकंट्रोलर को संदेश को संसाधित करने के लिए अग्रेषित करेंगे, जिसका कार्यान्वयन है:

public object ExecuteMessage<T>(IMessage<T> mqMsg)
{
    return Execute(mqMsg.Body, new MqRequestContext(this.Resolver, mqMsg));
}

कार्यान्वयन केवल mqMsg.Body . से अनुरोध डीटीओ को निकालता है और उस संदेश को एक सामान्य सेवा के रूप में संसाधित करता है, उस बिंदु से एक सी # अनुरोध डीटीओ पास किया जा रहा है, जिसमें एक MqRequestContext जिसमें MQ IHttpRequest, IHttpResponse स्टब्स शामिल हैं।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. doRedis Ubuntu Linux, R, और RStudio में अजीब सॉकेट कनेक्शन त्रुटि के साथ

  2. CKAN के एसिंक्रोनस बैकग्राउंड जॉब का उपयोग करके क्या किया जा सकता है?

  3. कैशिंग को अप टू डेट कैसे रखें

  4. मॉड्यूल नॉटफाउंड एरर:विंडोज़ पर 'जीआरपी' नाम का कोई मॉड्यूल नहीं है

  5. रेडिस:सॉर्ट करें और एन नेबर कीज प्राप्त करें