RabbitMQ ክፍል 2. ልውውጦችን መረዳት

Exchange - የመለዋወጫ ወይም የመለዋወጫ ነጥብ. መልዕክቶች ወደ እሱ ይላካሉ. Exchange መልእክቱን ያሰራጫል በአንድ ወይም በብዙ ወረፋዎች. እሱ መልዕክቶችን ወደ ወረፋ ያደርሳል በተፈጠሩ አገናኞች ላይ የተመሠረተ (bindings) በእሱ እና በወረፋው መካከል.

Exchange አይደለም የኤርላንግ ሂደት. በመለጠጥ ምክንያቶች exchange አብሮ በተሰራው የውሂብ ጎታ ውስጥ ሕብረቁምፊ (የማዞሪያ ሎጂክ የሚገኝበት ኮድ ካለው ሞጁሉ ጋር የሚያገናኝ) ነው። ምኒዚያ. 1 ሺህ ለዋጮች 1 ሜባ ማህደረ ትውስታ ብቻ ይበላሉ.

ማውጫ

  • RabbitMQ ክፍል 1. መግቢያ. Erlang፣ AMQP እና RPC
  • RabbitMQ ክፍል 2. ልውውጦችን መረዳት
  • RabbitMQ ክፍል 3. ወረፋዎችን እና ማሰሪያዎችን መረዳት
  • RabbitMQ ክፍል 4. መልዕክቶች እና ፍሬሞች ምንድን ናቸው ጋር ማስተናገድ
  • RabbitMQ ክፍል 5፡ የመልዕክት ስራን ማተም እና መጠቀም
  • RabbitMQ ክፍል 6. የፌዴሬሽኑ እና የአካፋ ሞጁሎች አጠቃላይ እይታ
  • RabbitMQ ክፍል 7. ስለ ግንኙነት እና ቻኔል ዝርዝሮች
  • RabbitMQ ክፍል 8. RabbitMQ በ NET
  • 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 አስገዳጅ እና ተመሳሳይ የመልዕክት ንብረት. headersDictionary<ключ, значение>.

ወደ መዝገበ-ቃላቱ ልዩ ቁልፍ ካከሉ 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.ደንበኛ:

//...
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 እና ደንበኛው የተለየ ሁኔታ ያገኛል ኦፕሬሽን የተቋረጠ ልዩየስህተት ኮድ እና መግለጫውን የያዘ።

ከመለጠፍ በፊት ልውውጥ መፈጠር አለበት። ወደ ላልሆነ መለዋወጫ መልእክት ካተሙ - RabbitMQ በጸጥታ ያስወግዱት።

ልውውጥ GUI ፍጠር

ወደ የአስተዳዳሪ ፓነል ይሂዱ RabbitMQ በተጠቃሚው ስር guest (የተጠቃሚ ስም፡- guest እና የይለፍ ቃል፡ guest). እባክዎን ተጠቃሚው መሆኑን ያስተውሉ guest መገናኘት የሚችለው ከ localhost ብቻ ነው። አሁን ወደ ትሩ እንሂድ Exchanges እና ጠቅ ያድርጉ Add a new exchange. ንብረቶቹን ይሙሉ:

RabbitMQ ክፍል 2. ልውውጦችን መረዳት

አብዛኛዎቹ ንብረቶች ከላይ ተገልጸዋል. እዚህ ካስቀመጥን እናስተውላለን Internal, ከዚያ ልውውጡ ጥቅም ላይ ሊውል የሚችለው ለ ብቻ ነው E2E. Producer ወደ እንደዚህ አይነት ልውውጥ መልዕክቶችን መላክ አይችሉም.

መደምደሚያ

ስርዓትን ሲፈጥሩ ቶፖሎጂን ለመግለጽ ምቹ ነው ማዘዋወር ግራፍ በመጠቀም. ግን ግራፍ መገንባት ከመጀመርዎ በፊት ከፍተኛ ትራፊክ ያላቸውን መንገዶች ማጉላት ጠቃሚ ነው ፣ ምክንያቱም። ይጠይቃሉ። ከፍተኛ የመተላለፊያ ይዘት (አፈጻጸም). በመቀጠል, ትራፊክን መከፋፈል ይችላሉ. እና ከዚያ መገንባት ይጀምሩ.

በተሰራው ግራፍ ውስጥ ካለ ውሱን ስብስብ የማዞሪያ ቁልፎች፣ እንግዲህ፣ ወደ ብዙ መመልከት ተገቢ ነው። fanout exchange1፡1 ከመሄጃ ቁልፉ ጋር የሚዛመዱ። ያንን አስታውሱ fanout exchange በጣም ፈጣኑ.

የመንገዶች ብዛት ከሆነ ወደ ወሰን አልባነት ያደላል።, ትኩረት መስጠት ተገቢ ነው topic exchange ወይም, አብነት አስፈላጊ ካልሆነ, ከዚያ መምረጥ ይችላሉ direct exchnge, ምክንያቱም እሱ ፈጣን ነው። topic exchange.

የተለያዩ ጥምረት exchange ትክክለኛውን ለማግኘት ሊረዳዎ ይገባል. ሊሰፋ የሚችል ውቅር, ሁለቱንም ወቅታዊ እና እያደገ የስርዓት መስፈርቶችን የሚያሟላ.

ՔԱՆԱԿ exchange እና ወረፋዎች ከመንገዶች ብዛት ጋር ሲነፃፀሩ ዝቅተኛ መሆን አለባቸው.

በሚቀጥለው ርዕስ ላይ ስለ ወረፋዎች እና ማያያዣዎች የበለጠ ለመረዳት እንጀምራለን.

ማጣቀሻዎች

ምንጭ: hab.com

አስተያየት ያክሉ