RabbitMQ. Π§Π°ΡΡ‚ΡŒ 1. Introduction. Erlang, AMQP

Π”ΠΎΠ±Ρ€Ρ‹ΠΉ дСнь, Π₯Π°Π±Ρ€! Π₯ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠΎΠΌ-справочником Π·Π½Π°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎ RabbitMQ ΠΈ ΡΠΆΠ°Ρ‚ΡŒ Π² ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρ‹.

ОглавлСниС

  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 1. Introduction. Erlang, AMQP ΠΈ RPC
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 2. РазбираСмся с Exchanges
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с Queues ΠΈ Bindings
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 4. РазбираСмся с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ-Ρ‚Π°ΠΊΠΎΠ΅ сообщСния ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΡ‹
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 5. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ потрСблСния сообщСний
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 6. ΠžΠ±Π·ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Federation ΠΈ Shovel
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 7. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎ Connection ΠΈ Chanel
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 8. RabbitMQ Π² .NET
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 9. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³

ΠšΡ€Π°Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎ AMQP

AMQP (Advanced Message Queuing Protocol) β€” ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ систСмы. Основная идСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ подсистСмы (ΠΈΠ»ΠΈ нСзависимыС прилоТСния) ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ сообщСниями Ρ‡Π΅Ρ€Π΅Π· AMQP-Π±Ρ€ΠΎΠΊΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ осущСствляСт ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ доставку, распрСдСлСниС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, подписку Π½Π° Π½ΡƒΠΆΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ сообщСний.

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» AMQP Π²Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Ρ€ΠΈ понятия:

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 1. Introduction. Erlang, AMQP

  • exchange (Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ»ΠΈ ΠΎΠ±ΠΌΠ΅Π½) β€” Π² Π½Π΅Ρ‘ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ сообщСния. Π’ΠΎΡ‡ΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π° распрСдСляСт сообщСниС Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ. Она ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ сообщСния Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π° основС созданных связСй (binding) ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌ ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ
  • queue (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ) β€” структура Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° дискС ΠΈΠ»ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ ссылки Π½Π° сообщСния ΠΈ ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΊΠΎΠΏΠΈΠΈ сообщСний consumers (потрСбитСлям)
  • binding (привязка) β€” ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сообщаСт Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΎΠ±ΠΌΠ΅Π½Π° Π² ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ эти сообщСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ²Π΅Ρ€Ρ… TCP/IP.

ΠšΡ€Π°Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎ Erlang

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° находится Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Π½Π° GitHub. АрхитСктура RabbitMQ-server основана Π½Π° Erlang ΠΈ BEAM.

Erlang Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Ericsson Π² сСрСдинС 1980-x ΠΊΠ°ΠΊ распрСдСлСнная, отказоустойчивая, систСма Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Π±Π΅Π·ΠΎΡ‚ΠΊΠ°Π·Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ 99,999%. Erlang примСняСтся Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… отраслях ΠΈ соврСмСнных прилоТСниям, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² WhatsApp. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° WhatsApp, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Facebook ΠΊΡƒΠΏΠΈΠ» Π·Π° $19 ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄ΠΎΠ²

ΠšΡ€Π°Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎ RabbitMQ

RabbitMQ – это Π±Ρ€ΠΎΠΊΠ΅Ρ€ сообщСний с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ. Он ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ собщСния ΠΏΠΎ всСм Π±Π°Π·ΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° AMQP описанным Π² спСцификации. RabbitMQ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΈ дополняСт ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» AMQP.

Основная идСя ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями Π² RabbitMQ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ producer (ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ) Π½Π΅ отправляСт сообщСния нСпосрСдствСнно Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. На самом Π΄Π΅Π»Π΅ ΠΈ довольно часто ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚, Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈ сообщСниС Π²ΠΎΠΎΠ±Ρ‰Π΅ доставлСно Π² ΠΊΠ°ΠΊΡƒΡŽ-Π»ΠΈΠ±ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ.

ВмСсто этого ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сообщСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ±ΠΌΠ΅Π½. Π‘ ΠΎΠ΄Π½ΠΎΠΉ стороны, ΠΎΠ±ΠΌΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния ΠΎΡ‚ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»Π΅ΠΉ, Π° с Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” отправляСт ΠΈΡ… Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ОбмСн Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ сообщСниСм. Π”ΠΎΠ»ΠΆΠ½ΠΎ Π»ΠΈ ΠΎΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ? Π”ΠΎΠ»ΠΆΠ½ΠΎ Π»ΠΈ ΠΎΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π² нСсколько ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ? Или сообщСниС Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 1. Introduction. Erlang, AMQP

ΠšΡ€Π°Ρ‚ΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ RabbitMQ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  1. Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒ отправляСт сообщСниС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΠΌΠ΅Π½Ρƒ
  2. ОбмСн, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² сообщСниС, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ Π² соотвСтствии с ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ привязки ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌ ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ
  3. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ ссылку Π½Π° это сообщСниС. Π‘Π°ΠΌΠΎ сообщСниС хранится Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΈΠ»ΠΈ Π½Π° дискС
  4. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ Π³ΠΎΡ‚ΠΎΠ² ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сообщСниС ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, сСрвСр создаСт копию сообщСния ΠΏΠΎ ссылкС ΠΈ отправляСт
  5. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС ΠΈ отправляСт Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅
  6. Π‘Ρ€ΠΎΠΊΠ΅Ρ€, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅, удаляСт копию сообщСния ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π—Π°Ρ‚Π΅ΠΌ удаляСт ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΈ с диска

RPC

ΠŸΡ€ΠΎΡ†Π΅ΡΡ RPC (remote procedure call) Π»Π΅ΠΆΠΈΡ‚ Π² основС практичСски всСх взаимодСйствий с ядром RabbitMQ. НапримСр, Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ обсуТдСния условий ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с RabbitMQ, дСмонстрируСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ процСсс RPC. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эта ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, RabbitMQ Π±ΡƒΠ΄Π΅Ρ‚ Π³ΠΎΡ‚ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ запросы ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°:

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 1. Introduction. Erlang, AMQP

Π’Π°ΠΊΠΆΠ΅ Π² спСцификации AMQP ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ взаимодСйствиС с сСрвСром. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ β€” это классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. НапримСр, Connection.Start – Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Start класса Connection.

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΠ°Π½Π°Π»Ρ‹

Для Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°Π½Π°Π»Ρ‹. ΠšΠ°Π½Π°Π»Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ°Π½Π°Π»ΠΎΠ². Π’ синхронном случаС Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΡ‚Π²Π΅Ρ‚.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ приходится ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ нСсколько ΠΊΠ°Π½Π°Π»ΠΎΠ². ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» создаСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Erlang процСсс. Одно ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ мноТСство ΠΊΠ°Π½Π°Π»ΠΎΠ² (multiplexing). Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΈΠ΅ структуры ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² памяти. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ‡Π΅ΠΌ большС ΠΊΠ°Π½Π°Π»ΠΎΠ² имССтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… соСдинСния, Ρ‚Π΅ΠΌ большС памяти ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ RabbitMQ для управлСния Ρ‚Π°ΠΊΠΈΠΌ соСдинСниСм.

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 1. Introduction. Erlang, AMQP

ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΊΠ°Π½Π°Π»Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ RabbitMQ.Client:

// ...
private void TryConnect()
{
    var factory = new ConnectionFactory() 
    {
        HostName = "host_name",
        UserName = "user_name",
        Password = "p@ssword",
        // Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΠΊΠΎΠ³ΠΎ восстановлСния
        // соСдинСния послС сбоСв сСти 
        AutomaticRecoveryEnabled = true
    };
    _connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
    _channel = _connection.CreateModel();
    // other options 
}

ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ соСдинСниС для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ рСкомСндуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ большим Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌ. ΠšΠ°Π½Π°Π»Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ постоянными, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ошибки ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° приводят ΠΊ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ ΠΊΠ°Π½Π°Π»Π°, поэтому срок слуТбы ΠΊΠ°Π½Π°Π»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‡Π΅, Ρ‡Π΅ΠΌ Ρƒ соСдинСния.

Π“Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ RabbitMQ?

Π’ контСкстС микросСрвисов ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» AMQP ΠΈ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² RabbitMQ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для асинхронного взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами.

Π’ контСкстС IIOT ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» AMQP ΠΈ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² RabbitMQ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрами (сСрвСр-сСрвСр). Π’Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠ»Π°Π³ΠΈΠ½ MQTT Plugin RabbitMQ ΡΠ²Π»ΡΡŽΡ‰Π΅Π³ΠΎΡΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° MQTT для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ ΠΈ сСрвСром Π² низкоскоростных срСдах с высокой Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ (ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² пСрСчислСн Π½Π° сайтС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°).

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π½Π°Ρ‡Π½Π΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ с Exchanges.

Бсылки

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ