RabbitMQ. Част 1. Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Erlang, AMQP

Π”ΠΎΠ±ΡŠΡ€ Π΄Π΅Π½, Π₯Π°Π±Ρ€! Искам Π΄Π° сподСля справочник с знания, ΠΊΠΎΠΈΡ‚ΠΎ успях Π΄Π° ΡΡŠΠ±Π΅Ρ€Π° ΠΏΠΎ RabbitMQ ΠΈ Π΄Π° Π³ΠΈ стисна Π² ΠΊΡ€Π°Ρ‚ΠΊΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΠΊΠΈ ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π‘ΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅

  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅. Erlang, AMQP ΠΈ RPC
  • RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с очСрСдями ΠΈ привязками
  • RabbitMQ. Част 4. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²ΠΎ прСдставляват ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠΎΠ²Π΅Ρ‚Π΅.
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 5. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ потрСблСния сообщСний
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 6. ΠžΠ±Π·ΠΎΡ€ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Federation ΠΈ Shovel
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 7. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎ Connection ΠΈ ChanΠ΅Π»
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 8. RabbitMQ Π² .NET
  • RabbitMQ. Π§Π°ΡΡ‚ΡŒ 9. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³

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

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

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» AMQP въвСТда Ρ‚Ρ€ΠΈ понятия:

RabbitMQ. Част 1. Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Erlang, AMQP

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

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΡŠΡ‚ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π½Π°Π΄ TCP/IP.

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

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

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

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

RabbitMQ – Ρ‚ΠΎΠ²Π° Π΅ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄. Π’ΠΎΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° спорСд основнитС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° AMQP описани Π² спСцификация. RabbitMQ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΈ допълва ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. AMQP.

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° идСя Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π² RabbitMQ Π΅, Ρ‡Π΅ producer (ΠΈΠ·Π΄Π°Ρ‚Π΅Π») Π½Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π°. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ чСсто издатСлят Π΄ΠΎΡ€ΠΈ Π½Π΅ Π·Π½Π°Π΅ Π΄Π°Π»ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Ρ‰Π΅ бъдС доставСно Π² някоя опашка.

ВмСсто Ρ‚ΠΎΠ²Π° издатСлят ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ само Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π°. ΠžΡ‚ Π΅Π΄Π½Π° страна, ΠΎΠ±ΠΌΠ΅Π½ΡŠΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΎΡ‚ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΠΈΡ‚Π΅, Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° страна β€” Π³ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Π² ΠΎΠΏΠ°ΡˆΠΊΠΈΡ‚Π΅. ΠžΠ±ΠΌΠ΅Π½ΡŠΡ‚ трябва Ρ‚ΠΎΡ‡Π½ΠΎ Π΄Π° Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡ€Π°Π²ΠΈ с ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎΡ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. Врябва Π»ΠΈ Π΄Π° бъдС Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° опашка? Врябва Π»ΠΈ Π΄Π° бъдС Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π² няколко опашки? Или ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ трябва Π΄Π° бъдС ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€Π°Π½ΠΎ.

RabbitMQ. Част 1. Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Erlang, AMQP

Π Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π² ΠΊΡ€Π°Ρ‚Ρ†Π΅ RabbitMQ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС описана ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½:

  1. Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡΡ‚ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΎΠ±ΠΌΠ΅Π½
  2. ΠžΠ±ΠΌΠ΅Π½ΡŠΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΉΠΊΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π° Π³ΠΎ Π² Π΅Π΄Π½Π° ΠΈΠ»ΠΈ няколко опашки Π² ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅ с ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ‚Π° Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π΅Π³ΠΎ ΠΈ ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π°
  3. ΠžΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π²Ρ€ΡŠΠ·ΠΊΠ° към Ρ‚ΠΎΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅. Π‘Π°ΠΌΠΎΡ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈΠ»ΠΈ Π½Π° диска
  4. Π©ΠΎΠΌ потрСбитСлят Π΅ Π³ΠΎΡ‚ΠΎΠ² Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚ ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π°, ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ създава ΠΊΠΎΠΏΠΈΠ΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° ΠΈ Π³ΠΎ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°
  5. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΈ ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°
  6. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ΡŠΡ‚, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΉΠΊΠΈ ΠΏΠΎΡ‚Π²ΡŠΡ€ΠΆΠ΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π° ΠΊΠΎΠΏΠΈΠ΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π°. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π° ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Π°Ρ‚Π° ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ ΠΎΡ‚ диска

RPC

ΠŸΡ€ΠΎΡ†Π΅Ρ RPC (remote procedure call) Π΅ Π² основата Π½Π° ΠΏΠΎΡ‡Ρ‚ΠΈ всички взаимодСйствия с ядрото RabbitMQ. НапримСр, Π½Π°Ρ‡Π°Π»Π½ΠΈΡ‚Π΅ обсъТдания Π½Π° условията Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° с RabbitMQ, дСмонстрира ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ процСс RPC. Π©ΠΎΠΌ послСдоватСлността ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ, RabbitMQ Ρ‚ΠΎΠΉ Ρ‰Π΅ бъдС Π³ΠΎΡ‚ΠΎΠ² Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ° запитвания ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°:

RabbitMQ. Част 1. Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Erlang, AMQP

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π² спСцификацията AMQP ΠΊΠ°ΠΊΡ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚, Ρ‚Π°ΠΊΠ° ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ ΠΎΡ‡Π°ΠΊΠ²Π° взаимодСйствиС със ΡΡŠΡ€Π²ΡŠΡ€Π°. ΠšΠΎΠΌΠ°Π½Π΄ΠΈΡ‚Π΅ са класовС ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ. НапримСр, Connection.Start – ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Start клас Connection.

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

Π—Π° Ρ‚Π°ΠΊΠΎΠ²Π° обмСнянС Π½Π° информация ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΡΡŠΡ€Π²ΡŠΡ€Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΊΠ°Π½Π°Π»ΠΈ. ΠšΠ°Π½Π°Π»ΠΈΡ‚Π΅ сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅. ВсСки ΠΊΠ°Π½Π°Π» Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ ΠΊΠ°Π½Π°Π»ΠΈ. Π’ синхронния случай Π½Π΅ Π΅ възмоТно Π΄Π° сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ слСдващата ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ бъдС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€.

Π—Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС отворят няколко ΠΊΠ°Π½Π°Π»Π°. ВсСки ΠΊΠ°Π½Π°Π» създава ΠΎΡ‚Π΄Π΅Π»Π΅Π½ Erlang процСс. Π•Π΄Π½ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° мноТСство ΠΊΠ°Π½Π°Π»ΠΈ (мултиплСксиранС). Π—Π° всСки ΠΊΠ°Π½Π°Π» ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ структури ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°. Π—Π°Ρ‚ΠΎΠ²Π° ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΊΠ°Π½Π°Π»ΠΈ ΠΈΠΌΠ° Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅Ρ‚ΠΎ, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° RabbitMQ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π°ΠΊΠΎΠ²Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅.

RabbitMQ. Част 1. Π’ΡŠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. 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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster