కుందేలుMQ. పార్ట్ 2. ఎక్స్ఛేంజ్లను అర్థం చేసుకోవడం

Exchange - వినిమాయకం లేదా మార్పిడి పాయింట్. దానికి సందేశాలు పంపబడతాయి. Exchange సందేశాన్ని పంపిణీ చేస్తుంది ఒకటి లేదా అంతకంటే ఎక్కువ క్యూలలో. అతను సందేశాలను క్యూకి పంపుతుంది సృష్టించిన లింక్‌ల ఆధారంగా (bindings) అది మరియు క్యూ మధ్య.

Exchange కాదు ఎర్లాంగ్ ప్రక్రియ. స్కేలబిలిటీ కారణాల కోసం exchange - ఇది అంతర్నిర్మిత డేటాబేస్‌లో ఒక లైన్ (రూటింగ్ లాజిక్ ఉన్న కోడ్‌తో కూడిన మాడ్యూల్‌కి లింక్) మతిమరుపు. 1 వేల ఎక్స్ఛేంజర్లు 1MB మెమరీని మాత్రమే వినియోగిస్తాయి.

విషయాల పట్టిక

డైరెక్ట్ ఎక్స్ఛేంజ్

Direct exchange - అవసరమైనప్పుడు ఉపయోగించబడుతుంది నిర్దిష్ట క్యూలకు సందేశాన్ని అందించండి. సందేశం ఎక్స్ఛేంజర్‌కు నిర్దిష్టంగా ప్రచురించబడింది రూటింగ్ కీ మరియు ఇదే రూటింగ్ కీతో ఈ ఎక్స్ఛేంజర్‌తో అనుబంధించబడిన అన్ని క్యూలలోకి వస్తుంది. రూటింగ్ కీ ఒక స్ట్రింగ్. ఉపయోగించి సరిపోలిక కనుగొనబడింది సమానత్వం కోసం తీగలను తనిఖీ చేస్తోంది.

సందేశ ప్రవాహం యొక్క గ్రాఫికల్ ప్రాతినిధ్యం:

కుందేలుMQ. పార్ట్ 2. ఎక్స్ఛేంజ్లను అర్థం చేసుకోవడం

В rabbitmq ఒక భావన ఉంది డిఫాల్ట్ ఎక్స్ఛేంజర్. ఈ direct exchange పేరు లేదు. డిఫాల్ట్ ఎక్స్ఛేంజర్ ఉపయోగించినట్లయితే, సందేశం సమానమైన పేరుతో క్యూకి మళ్లించబడుతుంది సందేశ రూటింగ్ కీ.

టాపిక్ మార్పిడి

Topic exchange - ఇలాంటి direct exchange రూటింగ్ కీని పోల్చడం ద్వారా ఎంపిక చేసిన రూటింగ్‌ని ప్రారంభిస్తుంది. కానీ, ఈ సందర్భంలో, కీ ఇవ్వబడుతుంది టెంప్లేట్ ద్వారా. టెంప్లేట్‌ను సృష్టించేటప్పుడు, ఉపయోగించండి 0 లేదా మరిన్ని పదాలు (అక్షరాలు AZ и az మరియు సంఖ్యలు 0-9), చుక్క, అలాగే చిహ్నాలతో వేరు చేయబడింది * и #.

  • * - ఖచ్చితంగా భర్తీ చేయవచ్చు 1 పదం
  • # - ద్వారా భర్తీ చేయవచ్చు 0 లేదా మరిన్ని పదాలు

సందేశ ప్రవాహం యొక్క గ్రాఫికల్ ప్రాతినిధ్యం:

కుందేలుMQ. పార్ట్ 2. ఎక్స్ఛేంజ్లను అర్థం చేసుకోవడం

వెర్షన్ నుండి RabbitMQ 2.4.0 కోసం రూటింగ్ అల్గోరిథం topic exchange వరకు పని చేయడం ప్రారంభించారు 145 రెట్లు వేగంగా. వారు ఒక విధానాన్ని ప్రవేశపెట్టడం ద్వారా దీనిని సాధించారు అమలు ప్రయత్నించండి, ఇది చెట్టు నిర్మాణంగా టెంప్లేట్‌ల ప్రాతినిధ్యాన్ని సూచిస్తుంది. ఉదాహరణకు టెంప్లేట్లు a.b.c, a.*.b.c, a.#.c и b.b.c కింది నిర్మాణం ద్వారా సూచించబడుతుంది:

కుందేలుMQ. పార్ట్ 2. ఎక్స్ఛేంజ్లను అర్థం చేసుకోవడం

నమూనా సరిపోలిక రూట్ నుండి ప్రారంభించి పై నుండి క్రిందికి శోధించబడుతుంది.

ఫీచర్స్:

  • ఈ వినిమాయకం యొక్క ఉపయోగం కావచ్చు అప్లికేషన్ యొక్క భవిష్యత్తు అభివృద్ధికి మంచి ఎంపిక, ఎందుకంటే టెంప్లేట్‌లను ఎల్లప్పుడూ అనుకూలీకరించవచ్చు, తద్వారా సందేశం అదే విధంగా ప్రచురించబడుతుంది direct exchange లేదా fanout exchange
  • ఉపయోగించే టెంప్లేట్లు * చాలా వేగంగాఉపయోగించే టెంప్లేట్‌ల కంటే #.
  • topic exchange నెమ్మదిగా direct exchange

ఫ్యాన్అవుట్ ఎక్స్ఛేంజ్

Fanout exchange - అన్ని సందేశాలు అన్ని క్యూలకు బట్వాడా చేయబడతాయి సందేశంలో రౌటింగ్ కీ పేర్కొనబడినప్పటికీ.

ఫీచర్స్:

  • RabbitMQ రూటింగ్ కీలు మరియు టెంప్లేట్‌లతో పని చేయదు పనితీరుపై సానుకూల ప్రభావం చూపుతుంది. ఇది అత్యంత వేగవంతమైనది exchange;
  • వినియోగదారులందరూ తప్పనిసరిగా అన్ని సందేశాలను ప్రాసెస్ చేయగలగాలి;

సందేశ ప్రవాహం యొక్క గ్రాఫికల్ ప్రాతినిధ్యం:

కుందేలుMQ. పార్ట్ 2. ఎక్స్ఛేంజ్లను అర్థం చేసుకోవడం

శీర్షికల మార్పిడి

Headers exchange - (కీ, విలువ) ప్రాపర్టీ జతల పోలిక ఆధారంగా సంబంధిత క్యూలకు సందేశాలను రూట్ చేస్తుంది headers బైండింగ్ మరియు ఇలాంటి మెసేజ్ ప్రాపర్టీ. headers a Dictionary<ключ, значение>.

మీరు నిఘంటువుకు ప్రత్యేక కీని జోడిస్తే x-match అర్థంతో any, జతలు (కీ, విలువ) పాక్షికంగా సరిపోలితే సందేశం రూట్ చేయబడుతుంది. ఈ ప్రవర్తన ఆపరేటర్‌ని పోలి ఉంటుంది or.

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

డిఫాల్ట్ కీ x-match విలువను కలిగి ఉంటుంది all. జంటలు (కీ, విలువ) పూర్తిగా సరిపోలినప్పుడు సందేశం రూట్ చేయబడుతుందని దీని అర్థం. ఈ ప్రవర్తన ఆపరేటర్‌ని పోలి ఉంటుంది and.

సందేశ ప్రవాహం యొక్క గ్రాఫికల్ ప్రాతినిధ్యం:

కుందేలుMQ. పార్ట్ 2. ఎక్స్ఛేంజ్లను అర్థం చేసుకోవడం

ఫీచర్స్:

  • అదనపు వశ్యత
  • అదనపు గణన ఓవర్ హెడ్. లక్షణం యొక్క అన్ని జతల (కీ, విలువ). headers సందేశ రూటింగ్ విలువలను గణించే ముందు తప్పనిసరిగా కీ పేరుతో క్రమబద్ధీకరించబడాలి. ఇతర రకాల మార్పిడి కంటే నెమ్మదిగా.

స్థిరమైన హ్యాషింగ్ ఎక్స్ఛేంజ్

ఈ వినిమాయకం అనుసంధానించు и నిర్మించబడలేదు в RabbitMQ.

Consistent-hashing exchange (స్థిరమైన హ్యాషింగ్‌తో మార్పిడి) - సందేశానికి సంభావ్య గ్రహీతలుగా ఉండే అనేక క్యూలు ఉన్నప్పుడు మరియు వాటి మధ్య లోడ్‌ను బ్యాలెన్స్ చేయాల్సిన అవసరం వచ్చినప్పుడు ఉపయోగించబడుతుంది. సందేశం బరువు ద్వారా క్యూతో అనుబంధించబడింది (దీని నుండి షరతులతో కూడిన స్ట్రింగ్ విలువ 0 - n).

క్యూల సమానమైన బరువు - ప్రతి క్యూ స్వీకరించబడుతుందని సూచిస్తుంది దాదాపు అదే మొత్తంలో సందేశాలు (ప్రతి సందేశం ఒక వరుసలో మాత్రమే ఉంచబడుతుంది). సందేశాల ఏకరీతి పంపిణీకి పూర్తి హామీ లేదు.

సందేశ ప్రవాహం యొక్క గ్రాఫికల్ ప్రాతినిధ్యం:

కుందేలుMQ. పార్ట్ 2. ఎక్స్ఛేంజ్లను అర్థం చేసుకోవడం

Hash రూటింగ్ కీ లేదా ప్రాపర్టీ ఆధారంగా గణించబడింది headers సందేశాలు. ప్రచురించబడిన అన్ని సందేశాలు వేర్వేరు రూటింగ్ కీలను కలిగి ఉంటే, లేదా headers, అప్పుడు పంపిణీ బరువు ద్వారా జరుగుతుంది. లేకపోతే, రూటింగ్ కీ ఉపయోగించబడుతుంది, లేదా headers.

ఒకే క్యూను ఉపయోగించే బహుళ వినియోగదారులతో పరిష్కారం కంటే వినియోగదారు త్రూపుట్ ఎక్కువగా పెరగాల్సిన అవసరం వచ్చినప్పుడు సహాయం చేయాలి.

ఎక్స్ఛేంజర్ల కలయిక (E2E)

అన్ని ఎక్స్ఛేంజర్ల ప్రవర్తనను కమ్యూనికేషన్ ఉపయోగించి కలపవచ్చు ఎక్స్చేంజ్-టు-ఎక్స్ఛేంజ్ (వినిమాయకాల కలయిక స్పెసిఫికేషన్‌లో చేర్చబడలేదు AMQP. ఇది వైపు నుండి ప్రోటోకాల్ పొడిగింపు RabbitMQ).

సందేశ ప్రవాహం యొక్క గ్రాఫికల్ ప్రాతినిధ్యం:

కుందేలుMQ. పార్ట్ 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 (ప్రత్యామ్నాయ వినిమాయకం) ఒక సందేశం అసలు మార్గం గుండా వెళ్లలేకపోతే, అది వేరే మార్గంలో మళ్లించబడేలా ప్రత్యామ్నాయ మార్పిడికి పంపబడుతుంది.

కుందేలుMQ. పార్ట్ 2. ఎక్స్ఛేంజ్లను అర్థం చేసుకోవడం

సృష్టి ఉంటే exchange బహుశా, అప్పుడు సర్వర్ క్లయింట్‌కు సమకాలీకరణను పంపుతుంది RPC సమాధానం Exchange.DeclareOk. సృష్టి ఉంటే అసాధ్యం (అభ్యర్థనపై తిరస్కరణ ఉంది Exchange.Declare) అప్పుడు ఛానెల్ మూసివేయబడుతుంది సర్వర్ అసమకాలిక ఆదేశాన్ని ఉపయోగిస్తుంది Channel.Close మరియు క్లయింట్ మినహాయింపు పొందుతారు ఆపరేషన్ ఇంటరప్టెడ్ ఎక్సెప్షన్, ఇది ఎర్రర్ కోడ్ మరియు దాని వివరణను కలిగి ఉంటుంది.

పోస్ట్ చేయడానికి ముందు ఒక ఎక్స్ఛేంజర్ తప్పనిసరిగా సృష్టించబడాలి. మీరు కొన్ని ఉనికిలో లేని ఎక్స్ఛేంజర్‌కు సందేశాన్ని ప్రచురించినట్లయితే - RabbitMQ నిశ్శబ్దంగా దాన్ని తీసివేయండి.

GUI ద్వారా మార్పిడిని సృష్టిస్తోంది

నిర్వాహక పానెల్‌కి వెళ్లండి RabbitMQ వినియోగదారు కింద guest (వినియోగదారు పేరు: guest మరియు పాస్వర్డ్: guest) దయచేసి వినియోగదారుని గమనించండి guest లోకల్ హోస్ట్ నుండి మాత్రమే కనెక్ట్ చేయగలదు. ఇప్పుడు ట్యాబ్‌కి వెళ్దాం Exchanges మరియు క్లిక్ చేయండి Add a new exchange. లక్షణాలను పూరించండి:

కుందేలుMQ. పార్ట్ 2. ఎక్స్ఛేంజ్లను అర్థం చేసుకోవడం

చాలా లక్షణాలు పైన వివరించబడ్డాయి. ఇక్కడ మనం సెట్ చేస్తే గమనించండి Internal, అప్పుడు మార్పిడి కోసం మాత్రమే ఉపయోగించవచ్చు E2E. Producer అటువంటి మార్పిడికి సందేశాలను పంపలేరు.

తీర్మానం

వ్యవస్థను అభివృద్ధి చేస్తున్నప్పుడు, టోపోలాజీని వివరించడం సౌకర్యంగా ఉంటుంది రూటింగ్ గ్రాఫ్ ఉపయోగించి. కానీ మీరు గ్రాఫ్‌ను నిర్మించడాన్ని ప్రారంభించడానికి ముందు, అధిక ట్రాఫిక్‌తో ఉన్న మార్గాలను హైలైట్ చేయడం విలువ, ఎందుకంటే వారు అవసరం అధిక నిర్గమాంశ (పనితీరు). తరువాత, మీరు ట్రాఫిక్‌ను వర్గీకరించవచ్చు. ఆపై భవనం ప్రారంభించండి.

నిర్మిత గ్రాఫ్‌లో ఉన్నట్లయితే పరిమిత సెట్ రూటింగ్ కీలు, అప్పుడు, అనేక వైపు చూడటం విలువ fanout exchange, ఇవి 1:1 రూటింగ్ కీకి సంబంధించినవి. అని గుర్తుంచుకోండి fanout exchange వేగవంతమైన.

మార్గాల సంఖ్య ఉంటే అనంతం వైపు మొగ్గు చూపుతుంది, ఇది దృష్టి పెట్టారు విలువ topic exchange లేదా, టెంప్లేట్ అవసరం లేకపోతే, మీరు ఎంచుకోవచ్చు direct exchnge, ఎందుకంటే అతను వేగంగా ఉన్నాడు topic exchange.

వివిధ కలయికలు exchange సరైనదాన్ని కనుగొనడంలో మీకు సహాయం చేయాలి. స్కేలబుల్ కాన్ఫిగరేషన్, ఇది ప్రస్తుత మరియు పెరుగుతున్న సిస్టమ్ అవసరాలు రెండింటినీ తీరుస్తుంది.

సంఖ్య exchange మరియు మార్గాల సంఖ్యతో పోలిస్తే క్యూలు తక్కువగా ఉండాలి.

తదుపరి వ్యాసంలో మేము క్యూలు మరియు బైండింగ్‌లను మరింత వివరంగా అర్థం చేసుకోవడం ప్రారంభిస్తాము.

సూచనలు

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి