RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे

Exchange - एक्सचेंजर किंवा एक्सचेंज पॉइंट. त्यावर संदेश पाठवले जातात. Exchange संदेश वितरित करते एक किंवा अधिक रांगेत. तो संदेश रांगेत पाठवते तयार केलेल्या दुव्यांवर आधारित (bindings) ते आणि रांग दरम्यान.

Exchange नाही Erlang प्रक्रिया. स्केलेबिलिटीच्या कारणास्तव exchange अंगभूत डेटाबेसमध्ये एक स्ट्रिंग आहे (कोडसह मॉड्यूलची लिंक जेथे रूटिंग लॉजिक स्थित आहे) स्मृतीभ्रंश. 1 हजार एक्सचेंजर्स फक्त 1MB मेमरी वापरतील.

सामग्री सारणी

  • RabbitMQ. भाग 1. परिचय. Erlang, AMQP आणि RPC
  • RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे
  • RabbitMQ. भाग 3. रांगा आणि बंधने समजून घेणे
  • RabbitMQ. भाग 4. मेसेज आणि फ्रेम्स काय आहे ते हाताळणे
  • RabbitMQ. भाग 5: संदेश कार्यप्रदर्शन प्रकाशित करणे आणि वापरणे
  • RabbitMQ. भाग 6. फेडरेशन आणि फावडे मॉड्यूलचे विहंगावलोकन
  • RabbitMQ. भाग 7. कनेक्शन आणि चॅनेल बद्दल तपशील
  • RabbitMQ. भाग 8. .NET मध्ये RabbitMQ
  • RabbitMQ. भाग 9. देखरेख

डायरेक्ट एक्सचेंज

Direct exchange - आवश्यकतेनुसार वापरले जाते विशिष्ट रांगेत संदेश वितरीत करा. संदेश एक्सचेंजरला विशिष्टसह प्रकाशित केला जातो राउटिंग की आणि समान रूटिंग कीसह या एक्सचेंजरशी संबंधित असलेल्या सर्व रांगांमध्ये प्रवेश करते. राउटिंग की एक स्ट्रिंग आहे. वापरून जुळणी केली जाते समानतेसाठी तार तपासत आहे.

संदेश प्रवाहाचे ग्राफिकल प्रतिनिधित्व:

RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे

В rabbitmq एक संकल्पना आहे डीफॉल्ट एक्सचेंजर. तो direct exchange नाव नाही. जर डीफॉल्ट एक्सचेंजर वापरला असेल, तर संदेश समान नावाच्या रांगेत पाठवला जाईल संदेश राउटिंग की.

विषय विनिमय

Topic exchange - समान direct exchange राउटिंग की तुलना करून निवडक राउटिंग सक्षम करते. परंतु, या प्रकरणात, की दिली आहे टेम्पलेट द्वारे. टेम्पलेट तयार करताना, वापरा 0 किंवा अधिक शब्द (अक्षरे AZ и az आणि संख्या 0-9), बिंदू, तसेच चिन्हांनी विभक्त * и #.

  • * - नक्की बदलले जाऊ शकते 1 शब्द
  • # - द्वारे बदलले जाऊ शकते 0 किंवा अधिक शब्द

संदेश प्रवाहाचे ग्राफिकल प्रतिनिधित्व:

RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे

आवृत्तीपासून सुरू होत आहे RabbitMQ 2.4.0 साठी राउटिंग अल्गोरिदम topic exchange पर्यंत काम सुरू केले 145 पट वेगाने. दृष्टिकोन राबवून त्यांनी हे साध्य केले अंमलबजावणी करण्याचा प्रयत्न करा, जे झाडाची रचना म्हणून टेम्पलेट्सचे प्रतिनिधित्व सूचित करते. उदाहरणार्थ टेम्पलेट्स a.b.c, a.*.b.c, a.#.c и b.b.c खालील रचना द्वारे दर्शविले जाईल:

RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे

पॅटर्न मॅचिंग रूटपासून सुरू होऊन वरपासून खालपर्यंत शोधले जाते.

वैशिष्ट्ये:

  • या एक्सचेंजरचा वापर होऊ शकतो संभाव्य भविष्यातील अॅप विकासासाठी एक चांगली निवड, कारण टेम्प्लेट नेहमी सानुकूलित केले जाऊ शकतात जेणेकरून संदेश समान प्रकाशित केला जाईल direct exchange किंवा fanout exchange
  • टेम्पलेट्स जे वापरतात * खूप वेगवानवापरणार्‍या टेम्पलेट्सपेक्षा #.
  • topic exchange हळू direct exchange

फॅनआउट एक्सचेंज

Fanout exchange - सर्व संदेश सर्व रांगेत वितरित केले जातात संदेशामध्ये राउटिंग की निर्दिष्ट केली असली तरीही.

वैशिष्ट्ये:

  • RabbitMQ राउटिंग की आणि टेम्पलेटसह कार्य करत नाही ज्याचा कार्यक्षमतेवर सकारात्मक परिणाम होतो. हे सर्वात वेगवान आहे exchange;
  • सर्व ग्राहक सर्व संदेशांवर प्रक्रिया करण्यास सक्षम असले पाहिजेत;

संदेश प्रवाहाचे ग्राफिकल प्रतिनिधित्व:

RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे

हेडर्स एक्सचेंज

Headers exchange - (की, मूल्य) गुणधर्मांच्या जोड्यांच्या तुलनेवर आधारित संदेश संबंधित रांगांवर निर्देशित करते headers बंधनकारक आणि तत्सम संदेश गुणधर्म. headers एक आहे Dictionary<ключ, значение>.

आपण शब्दकोशात एक विशेष की जोडल्यास x-match अर्थासह any, नंतर जोड्या (की, मूल्य) अंशतः जुळल्यास संदेश राउट केला जातो. हे वर्तन ऑपरेटरसारखेच आहे or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

डीफॉल्ट की x-match एक मूल्य समाविष्टीत आहे all. याचा अर्थ जोड्या (की, मूल्य) पूर्णपणे जुळल्यावर संदेश राउट केला जातो. हे वर्तन ऑपरेटरसारखेच आहे and.

संदेश प्रवाहाचे ग्राफिकल प्रतिनिधित्व:

RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे

वैशिष्ट्ये:

  • अतिरिक्त लवचिकता
  • अतिरिक्त संगणकीय ओव्हरहेड. विशेषताच्या सर्व जोड्या (की, मूल्य). headers संदेश राउटिंग मूल्यांची गणना करण्यापूर्वी की नावाने क्रमवारी लावणे आवश्यक आहे. इतर प्रकारच्या एक्सचेंजपेक्षा हळू.

सातत्यपूर्ण हॅशिंग एक्सचेंज

हा एक्सचेंजर आहे प्लगइन и अंगभूत नाही в RabbitMQ.

Consistent-hashing exchange (सातत्यपूर्ण हॅशिंगसह देवाणघेवाण) - जेव्हा संदेशाच्या संभाव्य प्राप्तकर्त्यांच्या एकाधिक रांगा असतात आणि जेव्हा तुम्हाला त्यांच्यामधील भार संतुलित करण्याची आवश्यकता असते तेव्हा वापरली जाते. संदेश रांगेशी वजनाने संबंधित आहे (पासून एक सशर्त स्ट्रिंग मूल्य 0 - n).

रांगांचे समतुल्य वजन - प्रत्येक रांगेला प्राप्त होईल असे सूचित करते सुमारे समान रक्कम संदेश (प्रत्येक संदेश फक्त एका रांगेत ठेवला जाईल). संदेशांच्या समान वितरणाची पूर्ण हमी नाही.

संदेश प्रवाहाचे ग्राफिकल प्रतिनिधित्व:

RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे

Hash राउटिंग की किंवा मालमत्तेवर आधारित गणना headers संदेश सर्व प्रकाशित संदेशांमध्ये भिन्न राउटिंग की असल्यास, किंवा headers, नंतर वितरण वजनाने होईल. अन्यथा, राउटिंग की वापरली जाईल, किंवा headers.

जेव्हा एकाच रांगेचा वापर करणार्‍या एकाधिक ग्राहकांसह समाधानापेक्षा ग्राहक थ्रूपुट अधिक वाढण्याची आवश्यकता असते तेव्हा मदत केली पाहिजे.

एक्सचेंजर्सचे संयोजन (E2E)

सर्व एक्सचेंजर्सचे वर्तन संप्रेषण वापरून एकत्र केले जाऊ शकते एक्सचेंज-टू-एक्सचेंज (एक्स्चेंजर्सचे संयोजन तपशीलामध्ये समाविष्ट केलेले नाही AMQP. हा बाजूचा प्रोटोकॉल विस्तार आहे RabbitMQ).

संदेश प्रवाहाचे ग्राफिकल प्रतिनिधित्व:

RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे

ती किंमत मोजून E2E आम्ही योग्य स्केलेबल कॉन्फिगरेशन शोधू शकतो जे वर्तमान आणि वाढत्या दोन्ही आवश्यकता पूर्ण करते.

एक्सचेंज तयार करा

एक्सचेंजर सिंक्रोनस वापरून तयार केला जातो RPC सर्व्हरला विनंती. पद्धत वापरून विनंती केली आहे Exchange.Declare, पॅरामीटर्ससह म्हणतात:

  • एक्सचेंजरचे नाव
  • एक्सचेंजर प्रकार
  • इतर पर्याय

निर्मितीचे उदाहरण exchange मदतीने RabbitMQ.Client:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange - आम्ही तयार करू इच्छित एक्सचेंजरचे नाव. नाव अद्वितीय असणे आवश्यक आहे
  • type - एक्सचेंजरचा प्रकार
  • durable - स्थापित केले असल्यास trueमग exchange कायम असेल. ते डिस्कवर संग्रहित केले जाईल आणि सर्व्हर/ब्रोकर रीस्टार्टमध्ये टिकून राहण्यास सक्षम असेल. जर मूल्य falseमग exchange तात्पुरते आहे आणि सर्व्हर/ब्रोकर रीस्टार्ट झाल्यावर काढले जाईल
  • autoDelete - स्वयंचलित हटवणे. Exchange सर्व संबंधित रांगा हटवल्या जातात तेव्हा हटवले जाईल
  • arguments पर्यायी युक्तिवाद आहेत. बर्याचदा, वितर्क सेटद्वारे alternative exchange (पर्यायी एक्सचेंजर). जर एखादा संदेश मूळ मार्गाने जाऊ शकत नसेल, तर तो वेगळ्या मार्गाने जाण्यासाठी पर्यायी एक्सचेंजला पाठविला जाऊ शकतो.

RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे

निर्मिती तर exchange कदाचित, नंतर सर्व्हर क्लायंटला सिंक्रोनस पाठवेल RPC उत्तर Exchange.DeclareOk. निर्मिती तर अशक्य आहे (विनंती नाकारण्यात आली Exchange.Declare), नंतर चॅनेल बंद होईल असिंक्रोनस कमांड वापरून सर्व्हर Channel.Close आणि क्लायंटला अपवाद मिळेल OperationInterruptedException, ज्यामध्ये त्रुटी कोड आणि त्याचे वर्णन असेल.

पोस्ट करण्यापूर्वी एक्सचेंजर तयार करणे आवश्यक आहे. तुम्ही काही अस्तित्वात नसलेल्या एक्सचेंजरला संदेश प्रकाशित केल्यास - RabbitMQ शांतपणे ते काढा.

एक्सचेंज GUI तयार करा

अ‍ॅडमिन पॅनलवर जा RabbitMQ वापरकर्ता अंतर्गत guest (वापरकर्तानाव: guest आणि पासवर्ड: guest). कृपया लक्षात ठेवा की वापरकर्ता guest फक्त लोकलहोस्ट वरून कनेक्ट होऊ शकते. आता टॅबवर जाऊया Exchanges आणि क्लिक करा Add a new exchange. गुणधर्म भरा:

RabbitMQ. भाग 2. एक्सचेंजेस समजून घेणे

बहुतेक गुणधर्म वर वर्णन केले आहेत. येथे आम्ही लक्षात ठेवा की आम्ही सेट केल्यास Internal, नंतर एक्सचेंज फक्त यासाठी वापरले जाऊ शकते E2E. Producer अशा एक्सचेंजला संदेश पाठवता येणार नाही.

निष्कर्ष

प्रणाली विकसित करताना, टोपोलॉजीचे वर्णन करणे सोयीचे आहे राउटिंग आलेख वापरून. परंतु आपण आलेख तयार करण्यास प्रारंभ करण्यापूर्वी, उच्च रहदारीसह पथ हायलाइट करणे फायदेशीर आहे, कारण. त्यांना आवश्यक आहे उच्च थ्रुपुट (कामगिरी). पुढे, तुम्ही रहदारीचे वर्गीकरण करू शकता. आणि मग बांधकाम सुरू करा.

तयार केलेल्या आलेखामध्ये अस्तित्वात असल्यास मर्यादित संच राउटिंग की, तर, अनेकांकडे पाहण्यासारखे आहे fanout exchange, जे राउटिंग कीशी संबंधित 1:1 आहेत. ते लक्षात ठेवा fanout exchange सर्वात गतिमान.

जर मार्गांची संख्या अनंताकडे झुकते, याकडे लक्ष देणे योग्य आहे topic exchange किंवा, टेम्पलेट आवश्यक नसल्यास, नंतर आपण निवडू शकता direct exchnge, कारण तो वेगवान आहे topic exchange.

विविधांचे संयोजन exchange तुम्हाला योग्य शोधण्यात मदत करावी. स्केलेबल कॉन्फिगरेशन, जे सध्याच्या आणि वाढत्या दोन्ही प्रणाली आवश्यकता पूर्ण करते.

ची संख्या exchange आणि मार्गांच्या संख्येच्या तुलनेत रांगा कमीत कमी असाव्यात.

पुढील लेखात, आपण रांगा आणि बंधनांबद्दल अधिक समजून घेऊ.

संदर्भ

स्त्रोत: www.habr.com

एक टिप्पणी जोडा