Exchange â äº€ææ©ãŸãã¯äº€æãã€ã³ãã ã¡ãã»ãŒãžãããã«éä¿¡ãããŸãã Exchange ã¡ãã»ãŒãžãé
åžããŸã XNUMX ã€ä»¥äžã®ãã¥ãŒã«ãããŸãã 圌 ã¡ãã»ãŒãžããã¥ãŒã«ã«ãŒãã£ã³ã°ãã äœæããããªã³ã¯ã«åºã¥ã㊠(bindings) ãšãã¥ãŒã®éã«ãããŸãã
Exchange ã§ã¯ãªã ã ã¹ã±ãŒã©ããªãã£äžã®çç±ãã exchange - ããã¯ãçµã¿èŸŒã¿ããŒã¿ããŒã¹å
ã®è¡ (ã«ãŒãã£ã³ã° ããžãã¯ãååšããã³ãŒããå«ãã¢ãžã¥ãŒã«ãžã®ãªã³ã¯) ã§ãã ã 1 å°ã®äº€ææ©ãæ¶è²»ããã¡ã¢ãªã¯ããã 1MB ã§ãã
ç®æ¬¡
- ã©ãããMQã ããŒã 3. ãã¥ãŒãšãã€ã³ãã£ã³ã°ã«ã€ããŠ
- ã©ãããMQã ããŒã 4. ã¡ãã»ãŒãžãšãã¬ãŒã ã®æ±ã
- ã©ãããMQã ããŒã 5: ã¡ãã»ãŒãžã®ãããªãã·ã¥ãšæ¶è²»ã®ããã©ãŒãã³ã¹
- ã©ãããMQã ããŒã 6. Federation ããã³ Shovel ã¢ãžã¥ãŒã«ã®ã¬ãã¥ãŒ
- ã©ãããMQã ããŒã 7. ã³ãã¯ã·ã§ã³ãšã·ã£ãã«ã«ã€ããŠã®è©³çް
- ã©ãããMQã ããŒã 8. .NET ã® RabbitMQ
- ã©ãããMQã ããŒã 9. ã¢ãã¿ãªã³ã°
çŽæ¥äº€æ
Direct exchange - å¿
èŠãªãšãã«äœ¿çšãããŸã ã¡ãã»ãŒãžãç¹å®ã®ãã¥ãŒã«é
ä¿¡ããã ã¡ãã»ãŒãžã¯ç¹å®ã®æ
å ±ã䜿çšããŠäº€æè
ã«ãããªãã·ã¥ãããŸãã ã«ãŒãã£ã³ã°ã㌠ãããŠãåæ§ã®ã«ãŒãã£ã³ã° ããŒãæã€ãã®äº€ææ©ã«é¢é£ä»ããããŠãããã¹ãŠã®ãã¥ãŒã«å
¥ããŸãã ã«ãŒãã£ã³ã°ããŒã¯æååã§ãã ãããã³ã°ã¯æ¬¡ã䜿çšããŠè¡ãããŸã æååã®ç䟡æ§ããã§ãã¯ãã.
ã¡ãã»ãŒãž ãããŒã®ã°ã©ãã£ã«ã«è¡šçŸ:

Ð rabbitmq æŠå¿µããããŸã ããã©ã«ãã®ãšã¯ã¹ãã§ã³ãžã£ã ãã direct exchange ããŒããŒã ã ããã©ã«ãã®ãšã¯ã¹ãã§ã³ãžã£ã䜿çšãããå Žåãã¡ãã»ãŒãžã¯æ¬¡ã®ååã®ãã¥ãŒã«ã«ãŒãã£ã³ã°ãããŸãã ã¡ãã»ãŒãžã«ãŒãã£ã³ã°ããŒ.
話é¡ã®äº€æ
Topic exchange - 䌌ãŠãã direct exchange ã«ãŒãã£ã³ã° ããŒãæ¯èŒããããšã§éžæçã«ãŒãã£ã³ã°ãæå¹ã«ããŸãã ãã ãããã®å ŽåãããŒãäžããããŸã ãã³ãã¬ãŒãã«ããã ãã³ãã¬ãŒããäœæãããšãã¯ã 0 ãŸãã¯ãã以äžã®åèªïŒæåïŒ AZ О az ãšæ°å 0-9)ãèšå·ãšåæ§ã«ãããã§åºåãããŠããŸãã * О #.
*- æ£ç¢ºã«çœ®ãæããããšãã§ããŸã1ã¯ãŒã#- ã§çœ®ãæããããšãã§ããŸã0ãŸãã¯ãã以äžã®åèª
ã¡ãã»ãŒãž ãããŒã®ã°ã©ãã£ã«ã«è¡šçŸ:

ããŒãžã§ã³ããéå§ RabbitMQ 2.4.0 ã«ãŒãã£ã³ã°ã¢ã«ãŽãªãºã topic exchange ãŸã§åãå§ããŸãã 145 åéããªããŸãã 圌ãã¯ãã®ã¢ãããŒããå®è£
ããããšã§ãããéæããŸãã ããã¯ããã³ãã¬ãŒããããªãŒæ§é ãšããŠè¡šçŸããããšãæå³ããŸãã ããšãã°ãã³ãã¬ãŒã a.b.c, a.*.b.c, a.#.c О b.b.c ã¯æ¬¡ã®æ§é ã§è¡šãããŸãã

ãã¿ãŒã³ ãããã³ã°ã¯ã«ãŒãããéå§ããŠäžããäžã«æ€çŽ¢ãããŸãã
ç¹åŸŽïŒ
- ãã®äº€æåšã®äœ¿çšã¯æ¬¡ã®ããã«ãªããŸãã å°æ¥ã®ã¢ããªéçºã®å¯èœæ§ãèæ
®ãããšè¯ãéžæã§ãã ãªããªããã³ãã¬ãŒãã¯ãã€ã§ãã«ã¹ã¿ãã€ãºããŠãã¡ãã»ãŒãžãåãæ¹æ³ã§å
¬éãããããã«ããããšãã§ããŸã
direct exchangeãŸãã¯fanout exchange - 䜿çšãããã³ãã¬ãŒã
*ã¯ããã«é«éã䜿çšãããã³ãã¬ãŒãããã#. topic exchangeé ãdirect exchange
ãã¡ã³ã¢ãŠã亀æ
Fanout exchange â ãã¹ãŠã®ã¡ãã»ãŒãžããã¹ãŠã®ãã¥ãŒã«é
ä¿¡ããã ã¡ãã»ãŒãžã«ã«ãŒãã£ã³ã° ããŒãæå®ãããŠããå Žåã§ãã
ç¹åŸŽïŒ
RabbitMQã«ãŒãã£ã³ã°ããŒãšãã³ãã¬ãŒãã§ã¯æ©èœããŸãã ããã¯ããã©ãŒãã³ã¹ã«ãã©ã¹ã®å¹æããããããŸãã ãããæéã§ãexchange;- ãã¹ãŠã®ã³ã³ã·ã¥ãŒããŒããã¹ãŠã®ã¡ãã»ãŒãžãåŠçã§ããªããã°ãªããŸããã
ã¡ãã»ãŒãž ãããŒã®ã°ã©ãã£ã«ã«è¡šçŸ:

ããããŒäº€æ
Headers exchange - (ããŒãå€) ããããã£ã®ãã¢ã®æ¯èŒã«åºã¥ããŠãé¢é£ãããã¥ãŒã«ã¡ãã»ãŒãžãéä¿¡ããŸãã headers ãã€ã³ãã£ã³ã°ããã³åæ§ã®ã¡ãã»ãŒãž ããããã£ã headers ããã¯è¡šã Dictionary<клÑÑ, зМаÑеМОе>.
èŸæžã«ç¹æ®ãªããŒã远å ããå Žå x-match æå³ã®ãã anyãã㢠(ããŒãå€) ãéšåçã«äžèŽããå Žåãã¡ãã»ãŒãžã¯ã«ãŒãã£ã³ã°ãããŸãã ãã®åäœã¯æŒç®åãšäŒŒãŠããŸãã or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");ããã©ã«ãã㌠x-match å€ãå«ãŸããŠããŸã allã ããã¯ã(ããŒãå€) ãã¢ãæ£ç¢ºã«äžèŽããå Žåã«ã¡ãã»ãŒãžãã«ãŒãã£ã³ã°ãããããšãæå³ããŸãã ãã®åäœã¯æŒç®åãšäŒŒãŠããŸãã and.
ã¡ãã»ãŒãž ãããŒã®ã°ã©ãã£ã«ã«è¡šçŸ:

ç¹åŸŽïŒ
- ãããªãæè»æ§
- 远å ã®èšç®ãªãŒããŒãããã 屿§ã®ãã¹ãŠã®ã㢠(ããŒãå€)
headersã¡ãã»ãŒãž ã«ãŒãã£ã³ã°å€ãèšç®ããåã«ãããŒåã§äžŠã¹æ¿ããå¿ èŠããããŸãã ä»ã®ã¿ã€ãã®äº€æããé ã.
äžè²«æ§ã®ããããã·ã¥äº€æ
ãã®äº€ææ©ã¯ã О çµã¿èŸŒãŸããŠããªã в RabbitMQ.
Consistent-hashing exchange (äžè²«æ§ã®ããããã·ã¥ã䜿çšãã亀æ) - ã¡ãã»ãŒãžã®æœåšçãªåä¿¡è
ãšãªããã¥ãŒãè€æ°ããå Žåãããã³ãã¥ãŒéã®è² è·ã®ãã©ã³ã¹ããšãå¿
èŠãããå Žåã«äœ¿çšãããŸãã ã¡ãã»ãŒãžãšãã¥ãŒã®æ¥ç¶ã¯ãéã¿ (æ¡ä»¶ä»ãæååå€) ã«ãã£ãŠè¡ãããŸãã 0 - n).
ãã¥ãŒã®åçã®éã¿ - åãã¥ãŒãåä¿¡ããããšã瀺ããŸãã ã»ãŒåãé ã¡ãã»ãŒãž (åã¡ãã»ãŒãžã¯ XNUMX ã€ã®ãã¥ãŒã®ã¿ã«é 眮ãããŸã)ã ã¡ãã»ãŒãžãåäžã«é åžããããšããå®å šãªä¿èšŒã¯ãããŸãã.
ã¡ãã»ãŒãž ãããŒã®ã°ã©ãã£ã«ã«è¡šçŸ:

Hash ã«ãŒãã£ã³ã° ããŒãŸãã¯ããããã£ã«åºã¥ããŠèšç®ãããŸã headers ã¡ãã»ãŒãžã ãããªãã·ã¥ããããã¹ãŠã®ã¡ãã»ãŒãžã«ç°ãªãã«ãŒãã£ã³ã° ããŒããã£ãå ŽåããŸã㯠headersã®å Žåãé
åã¯ééã«ãã£ãŠè¡ãããŸãã ãã以å€ã®å Žåã¯ãã«ãŒãã£ã³ã° ããŒã䜿çšãããŸãã headers.
ã³ã³ã·ã¥ãŒãã®ã¹ã«ãŒãããããåããã¥ãŒã䜿çšããè€æ°ã®ã³ã³ã·ã¥ãŒãã䜿çšãããœãªã¥ãŒã·ã§ã³ãããé«ãããå¿ èŠãããå Žåã«åœ¹ç«ã¡ãŸãã
亀æåšã®çµã¿åããïŒE2EïŒ
ãã¹ãŠã®äº€ææ©ã®åäœã¯éä¿¡ã䜿çšããŠçµã¿åãããããšãã§ããŸã ååŒæããååŒæãž (çµå亀æåšã¯ä»æ§ã«å«ãŸããŸãã) AMQPã ããã¯åŽããã®ãããã³ã«æ¡åŒµã§ã RabbitMQ).
ã¡ãã»ãŒãž ãããŒã®ã°ã©ãã£ã«ã«è¡šçŸ:

ã«ãã£ãŠ E2E çŸåšã®èŠä»¶ãšå¢å€§ããèŠä»¶ã®äž¡æ¹ãæºããé©åãªã¹ã±ãŒã©ãã«ãªæ§æãèŠã€ããããšãã§ããŸãã
亀æã®äœæ
ãšã¯ã¹ãã§ã³ãžã£ãŒã¯åæã䜿çšããŠäœæãããŸãã RPC ãµãŒããŒã«ãªã¯ãšã¹ãããŸãã ãªã¯ãšã¹ãã¯ã¡ãœããã䜿çšããŠè¡ãããŸã Exchange.Declareãã©ã¡ãŒã¿ãæå®ããŠåŒã³åºãããŸã:
- 亀æè å
- 亀æåšã¿ã€ã
- ãã®ä»ã®ãã©ã¡ãŒã¿
äœæäŸ exchange çšã㊠:
//...
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(代æ¿äº€æåšïŒã ã¡ãã»ãŒãžãå ã®ã«ãŒãã«æ²¿ã£ãŠç§»åã§ããªãå Žåã¯ãå¥ã®ãã¹ã«æ²¿ã£ãŠã«ãŒãã£ã³ã°ããã代æ¿äº€ææ©ã«éä¿¡ã§ããŸãã

åµäœãªã exchange å€åããã®åŸããµãŒããŒã¯ã¯ã©ã€ã¢ã³ãã«åæã¡ãã»ãŒãžãéä¿¡ããŸãã RPC çã Exchange.DeclareOkã åµäœãªã äžå¯èœ (ãªã¯ãšã¹ãã¯æåŠãããŸãã Exchange.DeclareïŒãã®åŸ ãã£ã³ãã«ã¯éããããŸã éåæã³ãã³ãã䜿çšãããµãŒã㌠Channel.Close ãããŠã¯ã©ã€ã¢ã³ãã¯äŸå€ãåãåããŸã ãããã«ã¯ãšã©ãŒ ã³ãŒããšãã®èª¬æãå«ãŸããŸãã
ã¡ãã»ãŒãžãæçš¿ããåã«ãšã¯ã¹ãã§ã³ãžã£ãäœæããå¿
èŠããããŸãã ååšããªãäº€ææ¥è
ã«ã¡ãã»ãŒãžãå
¬éãããš - RabbitMQ é»ã£ãŠåé€ããŠãã ããã
GUIçµç±ã§Exchangeãäœæãã
管çããã«ã«ç§»åããŸã RabbitMQ ãŠãŒã¶ãŒã®äžã§ guest (ãŠãŒã¶ãŒå: guest ããã³ãã¹ã¯ãŒã: guestïŒã ãŠãŒã¶ãŒã¯ã泚æãã ãã guest ããŒã«ã«ãã¹ãããã®ã¿æ¥ç¶ã§ããŸãã ããã§ã¯ã¿ãã«è¡ããŸããã Exchanges ãããŠã¯ãªã㯠Add a new exchangeã ããããã£ãå
¥åããŸãã

ã»ãšãã©ã®ããããã£ã¯äžã§èª¬æããŸããã ããã§ã次ã®ããã«èšå®ãããšã Internalããã®å Žåã亀æã¯æ¬¡ã®ç®çã§ã®ã¿äœ¿çšã§ããŸãã E2E. Producer ãã®ãããªååŒæã«ã¡ãã»ãŒãžãéä¿¡ããããšã¯ã§ããŸããã
ãŸãšã
ã·ã¹ãã éçºæã«ããããžãèšè¿°ãããšäŸ¿å©ã§ã ã°ã©ãã䜿ã£ãŠã ãã ããã°ã©ãã®äœæãéå§ããåã«ããã©ãã£ãã¯ã®å€ããã¹ã匷調衚瀺ãã䟡å€ããããŸãã 圌ãã¯èŠæ±ããŠãã人ãã¡ã§ã ããé«ãã¹ã«ãŒããã ïŒããã©ãŒãã³ã¹ïŒã 次ã«ããã©ãã£ãã¯ãåé¡ã§ããŸãã ãããŠæ§ç¯ãéå§ããŸãã
æ§ç¯ãããã°ã©ãã« æééå ã«ãŒãã£ã³ã°ããŒã«ã€ããŠã¯ãããã€ãæ€èšãã䟡å€ããããŸãã fanout exchangeããããã¯ã«ãŒãã£ã³ã° ããŒãš 1:1 ã§é¢é£ä»ããããŠããŸãã èŠããŠãããŠãã ãã fanout exchange æéã
è·¯ç·æ°ã®å Žå ç¡éã«åããåŸåããããæ³šæãã䟡å€ããããŸã topic exchange ãŸãã¯ããã³ãã¬ãŒããå¿
èŠãªãå Žåã¯ã次ãéžæã§ããŸãã direct exchngeã ãªããªãåœŒã®æ¹ãéãã§ã topic exchange.
è²ã
ãªçµã¿åãã exchange é©åãªãã®ãèŠã€ããã®ã«åœ¹ç«ã€ã¯ãã§ãã ã¹ã±ãŒã©ãã«ãªæ§æãçŸåšããã³å¢å€§ããã·ã¹ãã èŠä»¶ã®äž¡æ¹ãæºãããŸãã
æ° exchange ãŸãããã¥ãŒã¯ã«ãŒãã®æ°ã«æ¯ã¹ãŠæå°éã§ããå¿
èŠããããŸãã
次ã®èšäºã§ã¯ããã¥ãŒãšãã€ã³ãã£ã³ã°ã«ã€ããŠããã«è©³ããçè§£ããŠãããŸãã
ãªãã¡ã¬ã³ã¹
åºæïŒ habr.com
