Exchange
â 亀ææ©ãŸãã¯äº€æãã€ã³ãã ã¡ãã»ãŒãžãããã«éä¿¡ãããŸãã Exchange
ã¡ãã»ãŒãžãé
åžããŸã XNUMX ã€ä»¥äžã®ãã¥ãŒã«ãããŸãã 圌 ã¡ãã»ãŒãžããã¥ãŒã«ã«ãŒãã£ã³ã°ãã äœæããããªã³ã¯ã«åºã¥ã㊠(bindings
) ãšãã¥ãŒã®éã«ãããŸãã
Exchange
ã§ã¯ãªã exchange
- ããã¯ãçµã¿èŸŒã¿ããŒã¿ããŒã¹å
ã®è¡ (ã«ãŒãã£ã³ã° ããžãã¯ãååšããã³ãŒããå«ãã¢ãžã¥ãŒã«ãžã®ãªã³ã¯) ã§ãã
ç®æ¬¡
ã©ãããMQã ããŒã 1. ã¯ããã«ã ErlangãAMQPãRPC ã©ãããMQã ããŒã 2. 亀æã«ã€ããŠç解ãã - ã©ããã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