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 - แŠ แˆตแˆแˆ‹แŒŠ แ‰ แˆšแˆ†แŠ•แ‰ แ‰ต แŒŠแ‹œ แŒฅแ‰…แˆ แˆ‹แ‹ญ แ‹ญแ‹แˆ‹แˆ แˆˆแ‰ฐแ‹ˆแˆฐแŠ‘ แ‹ˆแˆจแ‹แ‹Žแ‰ฝ แˆ˜แˆแŠฅแŠญแ‰ต แˆ›แ‹ตแˆจแˆตแˆ˜แˆแŠฅแŠญแ‰ฑ แ‰  exchanger แ‹แˆตแŒฅ แ‰ณแ‰ตแˆŸแˆ แŠฅแŠ“ แˆแ‹ฉ แ‰ แˆ†แА แˆ˜แˆแŠฉ แ‰ณแ‰ตแˆŸแˆ แ‹จแˆ›แ‹žแˆชแ‹ซ แ‰แˆแ แŠฅแŠ“ แŠจแ‹šแˆ… แˆแ‹แ‹แŒฅ แŒ‹แˆญ แ‰ แ‰ฐแŒˆแŠ“แŠ™ แˆแˆ‰แˆ แ‹ˆแˆจแ‹แ‹Žแ‰ฝ แ‹แˆตแŒฅ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แ‹จแˆ›แ‹žแˆชแ‹ซ แ‰แˆแ แŠ แˆˆแ‹แข แ‹จแˆ›แ‹žแˆชแ‹ซ แ‰แˆแ‰ แˆ•แ‰ฅแˆจแ‰แˆแŠ แАแ‹แ‹จแˆ›แ‹›แˆ˜แŒƒ แแˆˆแŒ‹ แ‹จแˆšแŠจแŠ“แ‹ˆแАแ‹ แ‰ แˆšแŠจแ‰ฐแˆˆแ‹ แ‰ แˆ˜แŒ แ‰€แˆ แАแ‹ แ‹จแŠฅแŠฉแˆแАแ‰ตแŠ• แˆ•แ‰ฅแˆจแ‰แˆแŠแ‹Žแ‰ฝ แˆ˜แˆแ‰ฐแˆฝ.

แ‹จแˆ˜แˆแŠฅแŠญแ‰ต แแˆฐแ‰ต แŒแˆซแŠแŠญ แ‹แŠญแˆแŠ“แก

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 แˆ›แˆฐแˆชแ‹ซแ‹Žแ‰ฝ แŠฅแŠ“ แ‰ฐแˆ˜แˆณแˆณแ‹ญ แ‹จแˆ˜แˆแŠฅแŠญแ‰ต แ‰ฃแˆ…แˆชแ‹ซแ‰ตแข headers แˆ€ Dictionary<ะบะปัŽั‡, ะทะฝะฐั‡ะตะฝะธะต>.

แ‹ˆแ‹ฐ แˆ˜แ‹แŒˆแ‰ -แ‰ƒแˆ‹แ‰ฑ แˆแ‹ฉ แ‰แˆแ แŠซแŠจแˆ‰ 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 exchange, แ‹ญแˆ…แˆ แŠจแˆญแ‹•แˆฐ แŒ‰แ‹ณแ‹ฉ แ‰แˆแ แŒ‹แˆญ แ‹จแ‰ฐแ‹ซแ‹ซแ‹˜ 1:1 แАแ‹แข แ‹ซแŠ•แŠ• แ‹ซแˆตแ‰ณแ‹แˆฑแข fanout exchange แ‰ แŒฃแˆ แˆแŒฃแŠ‘แข

แ‹จแˆ˜แŠ•แŒˆแ‹ถแ‰ฝ แ‰ฅแ‹›แ‰ต แŠจแˆ†แА แ‹ˆแ‹ฐ แˆ›แˆˆแ‰‚แ‹ซ แ‹จแˆŒแˆˆแ‹ แ‹แŠ•แ‰ฃแˆŒแŠจแ‹šแ‹ซ แ‰ตแŠฉแˆจแ‰ต แˆ˜แˆตแŒ แ‰ต แ‰ฐแŒˆแ‰ข แАแ‹ topic exchange แ‹ˆแ‹ญแˆแฃ แŠ แ‰ฅแАแ‰ฑ แŠ แˆตแˆแˆ‹แŒŠ แŠซแˆแˆ†แАแฃ แˆ˜แˆแˆจแŒฅ แ‹ญแ‰ฝแˆ‹แˆ‰ direct exchngeแˆแŠญแŠ•แ‹ซแ‰ฑแˆ แˆแŒฃแŠ• แˆตแˆˆแˆ†แА topic exchange.

แ‹จแ‰ฐแˆˆแ‹ซแ‹ฉ แ‹แˆ…แ‹ถแ‰ฝ exchange แ‰ตแŠญแŠญแˆˆแŠ›แ‹แŠ• แˆˆแˆ›แŒแŠ˜แ‰ต แˆŠแˆจแ‹ณ แ‹ญแŒˆแ‰ฃแˆ แˆŠแˆฐแ‹ แ‹จแˆšแ‰ฝแˆ แ‹แ‰…แˆญ, แ‹ญแˆ…แˆ แ‹จแŠ แˆแŠ‘แŠ• แŠฅแŠ“ แŠฅแ‹ซแ‹ฐแŒˆ แ‹จแˆ˜แŒฃแ‹แŠ• แ‹จแˆตแˆญแ‹“แ‰ต แˆ˜แˆตแˆแˆญแ‰ถแ‰ฝแŠ• แ‹จแˆšแ‹ซแˆŸแˆ‹ แАแ‹แข

ี”ิฑี†ิฑิฟ exchange แŠฅแŠ“ แŠจแˆ˜แŠ•แŒˆแ‹ถแ‰ฝ แ‰ฅแ‹›แ‰ต แŒ‹แˆญ แˆฒแАแŒปแŒธแˆญ แ‰ขแ‹ซแŠ•แˆต แ‹ˆแˆจแ‹แ‹Žแ‰ฝ แˆŠแŠ–แˆฉ แ‹ญแŒˆแ‰ฃแˆแข

แ‰ แˆšแ‰€แŒฅแˆˆแ‹ แŒฝแˆ‘แแฃ แˆตแˆˆ แ‹ˆแˆจแ‹แ‹Žแ‰ฝ แŠฅแŠ“ แˆตแˆˆ แˆ›แ‹ซแ‹ซแ‹ฃแ‹Žแ‰ฝ แ‰ แ‹แˆญแ‹แˆญ แˆ˜แˆ˜แˆญแˆ˜แˆญ แŠฅแŠ•แŒ€แˆแˆซแˆˆแŠ•แข

แˆ›แŒฃแ‰€แˆปแ‹Žแ‰ฝ

แˆแŠ•แŒญ: hab.com

แ‰ DDoS แŒฅแ‰ แ‰ƒแฃ VPS VDS แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝ แˆˆแŒฃแ‰ขแ‹ซแ‹Žแ‰ฝ แŠ แˆตแ‰ฐแˆ›แˆ›แŠ แˆ›แˆตแ‰ฐแŠ“แŒˆแŒƒ แ‹ญแŒแ‹™ ๐Ÿ”ฅ แŠ แˆตแ‰ฐแˆ›แˆ›แŠ แ‹จแ‹ตแˆญ แŒฃแ‰ขแ‹ซ แˆ›แˆตแ‰ฐแŠ“แŒˆแŒƒ แ‰ แ‹ฒแ‹ถแŠคแˆต แŒฅแ‰ แ‰ƒแฃ แ‰ แ‰ชแ’แŠคแˆต แ‰ชแ‹ฒแŠคแˆต แŠ แŒˆแˆแŒ‹แ‹ฎแ‰ฝ แ‹ญแŒแ‹™ | ProHoster