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 හුවමාරුව

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 පණිවිඩ රවුටින් අගයන් ගණනය කිරීමට පෙර ප්‍රධාන නාමයෙන් වර්ග කළ යුතුය. වෙනත් ආකාරයේ හුවමාරු වලට වඩා මන්දගාමී වේ.

ස්ථාවර Hashing හුවමාරුව

මෙම හුවමාරුකාරකය වේ ප්ලගිනය и ඉදි කර නැත в 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 Localhost වෙතින් පමණක් සම්බන්ධ විය හැක. දැන් අපි ටැබ් එකට යමු 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

අදහස් එක් කරන්න