RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges

ОбмСн β€” ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ ΠΈΠ»ΠΈ Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π°. Π’ Π½Π΅Π³ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ сообщСния. ОбмСн раздСляСт сообщСниС Π² ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ. Он ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ сообщСния Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π° основС созданных связСй (bindings) ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌ ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ.

ОбмСн Π½Π΅ являСтся Erlang-процСссом. Из сообраТСний ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ β€” это строка (ссылка Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с ΠΊΠΎΠ΄ΠΎΠΌ, Π³Π΄Π΅ Π»Π΅ΠΆΠΈΡ‚ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ) Π²ΠΎ встроСнной Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… mnesia. 1 тысяча ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ всСго 1ΠœΠ‘ памяти.

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

  • 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. ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³

ΠŸΡ€ΡΠΌΠΎΠΉ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ

ΠŸΡ€ΡΠΌΠΎΠΉ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сообщСниС Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ публикуСтся Π² ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π²ΠΎ всС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с этим ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠΎΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠšΠ»ΡŽΡ‡ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” это строка.Поиск соотвСтствия происходит ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ строк Π½Π° ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ..

ГрафичСскоС прСдставлСниС ΠΏΠΎΡ‚ΠΎΠΊΠ° сообщСний:

RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges

Π’ rabbitmq сущСствуСт понятиС ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’ΠΎΠ²Π° прямой ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ. Если примСняСтся ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΎ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ сообщСния..

Π’Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°

Π’Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ – Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ прямой ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ осущСствлСния Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡƒΡ‚Π΅ΠΌ сравнСния ΠΊΠ»ΡŽΡ‡Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. Но, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΊΠ»ΡŽΡ‡ задаСтся ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ.ΠŸΡ€ΠΈ создании шаблона ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 0 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ слов (Π±ΡƒΠΊΠ²Ρ‹ AZ ΠΈ az ΠΈ Ρ†ΠΈΡ„Ρ€Ρ‹ 0-9), Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ символы * ΠΈ #.

  • * β€” ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° Ρ€ΠΎΠ²Π½ΠΎ 1 Π΄ΡƒΠΌΠ°
  • # β€” ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Π΅Π½ Π½Π° 0 ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ слов.

ГрафичСскоС прСдставлСниС ΠΏΠΎΡ‚ΠΎΠΊΠ° сообщСний:

RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges

Начиная с вСрсии RabbitMQ 2.4.0 Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ° стал Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎ 145 Ρ€Π°Π· быстрСС. Π”ΠΎΠ±ΠΈΠ»ΠΈΡΡŒ ΠΎΠ½ΠΈ этого ΠΏΡƒΡ‚Π΅ΠΌ внСдрСния ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° trie implementation, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ прСдставлСниС шаблонов Π² Π²ΠΈΠ΄Π΅ структуры Π΄Π΅Ρ€Π΅Π²Π°. НапримСр, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ a.b.c, a.*.b.c, a.#.c ΠΈ b.b.c Π±ΡƒΠ΄ΡƒΡ‚ прСдставлСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ структурой:

RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges

Поиск соотвСтствия ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ осущСствляСтся, начиная с корня ΠΈ слСдуя свСрху Π²Π½ΠΈΠ·.

ΠžΡΠΎΠ±Π΅Π½ΠΎΡΡ‚ΠΈ:

  • ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ этого ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠ±ΡŠΡ€ ΠΈΠ·Π±ΠΎΡ€ Π·Π° възмоТно Π±ΡŠΠ΄Π΅Ρ‰ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΡ‚Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ настроСни, Π·Π° Π΄Π° сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ прямой ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ ΠΈΠ»ΠΈ fanout exchange
  • шаблони, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ * ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ #.
  • Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ° ΠΏΠΎ-Π±Π°Π²Π½ΠΎ прямой ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ

Fanout Exchange

Fanout exchange – всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ сС доставят Π΄ΠΎ всички опашки Π΄ΠΎΡ€ΠΈ Π°ΠΊΠΎ Π² ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ ΠΊΠ»ΡŽΡ‡ Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ.

ΠžΡΠΎΠ±Π΅Π½ΠΎΡΡ‚ΠΈ:

  • RabbitMQ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ с ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ шаблони ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ влияС Π½Π° производитСлността. Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-Π±ΡŠΡ€Π·ΠΈΡΡ‚ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ;
  • всички ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚ всички ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ;

ГрафичСскоС прСдставлСниС ΠΏΠΎΡ‚ΠΎΠΊΠ° сообщСний:

RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges

Headers 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.

ГрафичСскоС прСдставлСниС ΠΏΠΎΡ‚ΠΎΠΊΠ° сообщСний:

RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges

ΠžΡΠΎΠ±Π΅Π½ΠΎΡΡ‚ΠΈ:

  • Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Π³ΡŠΠ²ΠΊΠ°Π²ΠΎΡΡ‚
  • Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ Π·Π° изчислСниС. Всички Π΄Π²ΠΎΠΉΠΊΠΈ (ΠΊΠ»ΡŽΡ‡, стойност) Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° headers трябва Π΄Π° сС сортират ΠΏΠΎ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŽΡ‡Π° ΠΏΡ€Π΅Π΄ΠΈ изчисляванСто Π½Π° стойноститС Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. По-Π±Π°Π²Π½ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏΠΎΠ²Π΅ exchange.

Consistent-Hashing Exchange

Π’ΠΎΠ·ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ Π΅ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΈ Π½Π΅ Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½ Π² RabbitMQ.

Consistent-hashing exchange (exchange с консистСнтно Ρ…Π΅ΡˆΠΈΡ€Π°Π½Π΅) – ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° сС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° няколко опашки, ΠΊΠΎΠΈΡ‚ΠΎ са ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»Π½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΈ ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС балансира Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ тях. Π‘Π²ΡŠΡ€Π·Π°Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ с ΠΎΠΏΠ°ΡˆΠΊΠ°Ρ‚Π° става ΠΏΠΎ Ρ‚Π΅Π³Π»ΠΎ (условна строкова стойност ΠΎΡ‚ 0 - n).

Π•ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡ‚ΠΎ Ρ‚Π΅Π³Π»ΠΎ Π½Π° ΠΎΠΏΠ°ΡˆΠΊΠΈΡ‚Π΅ – оповСстява, Ρ‡Π΅ Π² всяка опашка Ρ‰Π΅ пристигнС ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Ρ€Π°Π²Π½ΠΎ количСство ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ (всяко ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Ρ‰Π΅ бъдС поставСно само Π² Π΅Π΄Π½Π° опашка). Пълна гаранция Π·Π° Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° няма.

ГрафичСскоС прСдставлСниС ΠΏΠΎΡ‚ΠΎΠΊΠ° сообщСний:

RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges

Hash сС изчислява Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΊΠ»ΡŽΡ‡Π° Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈΠ»ΠΈ свойството headers Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ. Ако всички ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ ΠΈΠΌΠ°Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈΠ»ΠΈ headers, Ρ‚ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Ρ‰Π΅ сС случва ΠΏΠΎ Ρ‚Π΅Π³Π»ΠΎ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π΅Π½ случай Ρ‰Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ»ΡŽΡ‡ΡŠΡ‚ Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈΠ»ΠΈ headers.

Врябва Π΄Π° ΠΏΠΎΠΌΠ°Π³Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ пропускната способност Π½Π° потрСбитСля сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎ-високо ΠΎΡ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ с мноТСство ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ Π΅Π΄Π½Π° опашка.

ΠšΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΡ†ΠΈ (E2E)

ΠŸΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° всички ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΡ†ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° Ρ‡Ρ€Π΅Π· ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ Exchange-to-Exchange (ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΡ†ΠΈ Π½Π΅ Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² спСцификацията AMQP. Π’ΠΎΠ²Π° Π΅ Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° отстрани RabbitMQ).

ГрафичСскоС прСдставлСниС ΠΏΠΎΡ‚ΠΎΠΊΠ° сообщСний:

RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges

Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° E2E ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° ΠΌΠ°Ρ‰Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ° конфигурация, която отговаря ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅, Ρ‚Π°ΠΊΠ° ΠΈ Π½Π° растящитС изисквания.

БъздаванС на Exchange

Π‘ΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ става Ρ‡Ρ€Π΅Π· синхронно RPC Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅ към ΡΡŠΡ€Π²Π΅Ρ€Π°. Π—Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° Ρ‡Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Exchange.Declare, ΠΏΠΎΠ²ΠΈΠΊΠ°Π½ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ:

  • ΠΈΠΌΠ΅ Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°
  • Ρ‚ΠΈΠΏ Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°
  • Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° създаванС ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° RabbitMQ.Client:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ β€” ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°, ΠΊΠΎΠΉΡ‚ΠΎ искамС Π΄Π° създадСм. Π˜ΠΌΠ΅Ρ‚ΠΎ трябва Π΄Π° бъдС ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΎ
  • Ρ‚ΠΈΠΏ β€” Ρ‚ΠΈΠΏ Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°
  • durable β€” ΠΏΡ€ΠΈ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° истинно, Ρ‚ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ Ρ‚ΠΎΠΉ Ρ‰Π΅ бъдС постоянСн. Π’ΠΎΠΉ Ρ‰Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π½Π° диска ΠΈ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡ†Π΅Π»Π΅Π΅ слСд рСстартиранС Π½Π° ΡΡŠΡ€Π²Π΅Ρ€Π°/Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°. Ако стойността Π½Π΅Π²Π΅Ρ€Π½ΠΎ, Ρ‚ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Ρ‰Π΅ бъдС ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΡΡŠΡ€Π²Π΅Ρ€Π°/Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° бъдС рСстартиран
  • autoDelete β€” Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈΠ·Ρ‚Ρ€ΠΈΠ²Π°Π½Π΅. ОбмСн Ρ‚ΠΎΠΉ Ρ‰Π΅ бъдС ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ всички ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ опашки са ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚ΠΈ
  • arguments β€” ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π½ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ. Най-чСсто, Ρ‡Ρ€Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ‚Π΅ сС Π·Π°Π΄Π°Π²Π°Ρ‚ alternative exchange (Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ). Ако ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π΅ ΠΏΠΎ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΈΡ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ·ΠΏΡ€Π°Ρ‚Π΅Π½ΠΎ Π² Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΡ€Π°Π½Π΅ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ ΠΏΡŠΡ‚.

RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges

Ако ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ Π΅ възмоТно, ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ Ρ‰Π΅ ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° синхронСн RPC ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Exchange.DeclareOk. Ако ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π΅ Π΅ възмоТно (възникна ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ заявка Exchange.Declare), Ρ‚ΠΎΠ³Π°Π²Π° ΠΊΠ°Π½Π°Π»ΡŠΡ‚ Ρ‰Π΅ бъдС Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ ΠΎΡ‚ ΡΡŠΡ€Π²ΡŠΡ€Π° Ρ‡Ρ€Π΅Π· асинхронна ΠΊΠΎΠΌΠ°Π½Π΄Π° Channel.Close ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡŠΡ‚ Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ OperationInterruptedException, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΊΠΎΠ΄ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΈ Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ описаниС.

ΠžΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΡŠΡ‚ трябва Π΄Π° бъдС създадСн ΠΏΡ€Π΅Π΄ΠΈ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ. Ако ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ Π² Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ β€” RabbitMQ Ρ‚ΠΎΠΉ Ρ‰Π΅ бъдС Ρ‚ΠΈΡ…ΠΎ ΠΈΠ·Ρ‚Ρ€ΠΈΡ‚.

БъздаванС Π½Π° Exchange Ρ‡Ρ€Π΅Π· Π³Ρ€Π°Ρ„ΠΈΡ‡Π΅Π½ интСрфСйс

Π’Π»ΠΈΠ·Π°ΠΌΠ΅ Π² администрацията RabbitMQ ΠΊΠ°Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π³ΠΎΡΡ‚ΡŒ (username: Π³ΠΎΡΡ‚ΡŒ ΠΈ password: Π³ΠΎΡΡ‚ΡŒ). ΠžΠ±ΡŠΡ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Π΅ потрСбитСлят Π³ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΠ²ΡŠΡ€Π·Π²Π° само ΠΎΡ‚ локалния хост. Π‘Π΅Π³Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ Π½Π° Ρ‚Π°Π±Π° Exchanges ΠΈ ΠΊΠ»ΠΈΠΊΠ²Π°ΠΌΠ΅ Π½Π° Add a new exchange. ПопълвамС свойствата:

RabbitMQ. Част 2. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Exchanges

По-голямата част ΠΎΡ‚ свойствата бяха описани ΠΏΠΎ-Π³ΠΎΡ€Π΅. Π’ΡƒΠΊ отбСлязвамС, Ρ‡Π΅ Π°ΠΊΠΎ Π·Π°Π΄Π°Π΄Π΅ΠΌ Internal, Ρ‚ΠΎΠ³Π°Π²Π° ΠΎΠ±ΠΌΠ΅Π½ΡŠΡ‚ Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° само Π·Π° E2E. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π» няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ към Ρ‚Π°ΠΊΡŠΠ² ΠΎΠ±ΠΌΠ΅Π½.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° систСмата Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π΄Π° сС опишС топологията Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ Ρ‡Ρ€Π΅Π· Π³Ρ€Π°Ρ„. Но ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Ρ‚Π΅ Π³Ρ€Π°Ρ„Π°, Π΅ Π΄ΠΎΠ±Ρ€Π΅ Π΄Π° сС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ‚ ΠΏΡŠΡ‚ΠΈΡ‰Π°Ρ‚Π° с висок Ρ‚Ρ€Π°Ρ„ΠΈΠΊ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π΅ изискват ΠΏΠΎ-висока пропускна способност (производитСлност). Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° класифициратС Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. И слСд Ρ‚ΠΎΠ²Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ.

Ако Π² построСния Π³Ρ€Π°Ρ„ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΊΡ€Π°ΠΉΠ½ΠΎ мноТСство ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ, Ρ‚ΠΎΠ³Π°Π²Π° си струва Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° няколко fanout exchange, ΠΊΠΎΠΈΡ‚ΠΎ са Π² 1:1 Π²Ρ€ΡŠΠ·ΠΊΠ° с ΠΊΠ»ΡŽΡ‡Π° Π·Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ. ΠŸΠΎΠΌΠ½Π΅Ρ‚Π΅, Ρ‡Π΅ fanout exchange Π½Π°ΠΉ-Π±ΡŠΡ€Π·ΠΈΡΡ‚.

Ако броят Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΡ‚Π΅ стрСми към бСзкрайност, Ρ‚ΠΎΠ³Π°Π²Π° си струва Π΄Π° сС ΠΎΠ±ΡŠΡ€Π½Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ° ΠΈΠ»ΠΈ, Π°ΠΊΠΎ ΡˆΠ°Π±Π»ΠΎΠ½ΡŠΡ‚ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ пряка размяна, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠΉ Π΅ ΠΏΠΎ-Π±ΡŠΡ€Π· Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°.

ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ трябва Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π°Ρ‚ Π·Π° Π½Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π°Π²ΠΈΠ»Π½Π°Ρ‚Π° ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ° конфигурация, която отговаря ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅, Ρ‚Π°ΠΊΠ° ΠΈ Π½Π° нарастващитС изисквания Π½Π° систСмата.

Π‘Ρ€ΠΎΠΉ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ ΠΈ ΠΎΠΏΠ°ΡˆΠΊΠΈΡ‚Π΅ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ Π² сравнСниС с броя Π½Π° ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΡ‚Π΅.

Π’ слСдващата статия Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΏΠΎ-ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Queues ΠΈ Bindings.

Π’Ρ€ΡŠΠ·ΠΊΠΈ

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

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