RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с Queues ΠΈ Bindings

Queue (ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ) β€” структура Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° дискС ΠΈΠ»ΠΈ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ ссылки Π½Π° сообщСния ΠΈ ΠΎΡ‚Π΄Π°Π΅Ρ‚ ΠΈΡ… ΠΊΠΎΠΏΠΈΠΈ consumers (потрСбитСлям). Queue прСдставляСт собой Erlang-процСсс с состояниСм (Π³Π΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ сами сообщСния). 1 тысяча ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ порядка 80Mb.

Binding (привязка) β€” ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сообщаСт ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΡƒ Π² ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ сообщСния.

ОглавлСниС

Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

Если созданиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ происходит с установлСнным ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ autoDelete, Ρ‚ΠΎ такая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ автоматичСски ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ сСбя. Π’Π°ΠΊΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° всС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΎΡ‚ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΠΈΡΡŒ.

Если созданиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ происходит с установлСнным ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ exclusive, Ρ‚ΠΎ такая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŽ ΠΈ удаляСтся Ссли закроСтся ΠΊΠ°Π½Π°Π». Π”ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° ΠΊΠ°Π½Π°Π» Π½Π΅ закроСтся, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ/ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого соСдинСния. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ exclusive установлСн, Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ autoDelete Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ эффСкта.

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

  • ΠΏΡ€ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Ρ€Π°Π·Ρ€Ρ‹Π²Π΅ связи ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ‚Π΅Ρ€ΡΡ‚ΡŒ сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‰Ρ‘ Π½Π΅ успСли Π΄ΠΎΠΉΡ‚ΠΈ Π΄ΠΎ потрСбитСля
  • ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΠΌΠ°Ρ‚ΡŒ Ρ„Π΅Π½ΠΎΠΌΠ΅Π½ binding churn. Π€Π΅Π½ΠΎΠΌΠ΅Π½ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° количСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎ созданию/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ привязок достигаСт ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ кластСрном Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎ всСм ΡƒΠ·Π»Π°ΠΌ ΠΈ создаст Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ. Π”Π°Π½Π½Ρ‹ΠΉ процСсс ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° счСт контроля количСства подписок

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

Если созданиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ происходит с установлСнным ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ durable, Ρ‚ΠΎ такая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сохраняСт своС состояниС ΠΈ восстанавливаСтся послС пСрСзапуска сСрвСра/Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°. Данная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Queue.Delete.

Highly Available ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ HA Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ кластСрной срСды RabbitMQ. Π’ кластСрном Ρ€Π΅ΠΆΠΈΠΌΠ΅ вся информация ΠΎΠ± ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°Ρ…, очСрСдях, привязках ΠΈ потрСбитСлях Π±ΡƒΠ΄Π΅Ρ‚ скопирована Π½Π° всС ΡƒΠ·Π»Ρ‹.

Когда сообщСниС публикуСтся Π² ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ HA ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠ½ΠΎ хранится Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡƒΠ·Π»Π΅, относящСмуся ΠΊ HA ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ сообщСниС потрСбляСтся Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ ΠΈΠ· ΡƒΠ·Π»ΠΎΠ², всС ΠΊΠΎΠΏΠΈΠΈ этого сообщСния Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»Π°Ρ….

ΠžΡ‡Π΅Ρ€Π΅Π΄ΠΈ HA ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π½Π° всС ΡƒΠ·Π»Ρ‹ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ кластСрС ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅.

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с Queues ΠΈ Bindings

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

  • использованиС HA ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ наказаниям Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ сообщСния Π² Π½Π΅ΠΊΡƒΡŽ HA ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΈ сообщСния ΠΈΠ· HA ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ RabbitMQ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΏΠΎ всСм ΡƒΠ·Π»Π°ΠΌ (2-3 ΡƒΠ·Π»Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ достаточно)

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ происходит ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ синхронного RPC запроса ΠΊ сСрвСру. Запрос осущСствляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Queue.Declare, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

  • Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ
  • Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ RabbitMQ.Client:

// ...
channel.QueueDeclare(
    queue: "my_queue",
    durable: false,
    exclusive: false,
    autoDelete: false,
    arguments: null
);
// ...

  • queue β€” Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ. НазваниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с систСмным ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ
  • durable β€” Ссли true, Ρ‚ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ своС состояниС ΠΈ восстанавливаСтся послС пСрСзапуска сСрвСра/Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°
  • exclusive β€” Ссли true, Ρ‚ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŽ
  • autoDelete β€” Ссли true, Ρ‚ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ автоматичСски ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ сСбя
  • arguments β€” Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. НиТС Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

arguments

  • x-message-ttl(x-message-time-to-live) β€” позволяСт ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ врСмя истСчСния срока ΠΆΠΈΠ·Π½ΠΈ сообщСния Π² миллисСкундах. Если созданиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ происходит с установлСнным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° x-message-ttl, Ρ‚ΠΎ такая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΠΈΡΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ сообщСния, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… истСк срок дСйствия. Установка значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° x-message-ttl Π·Π°Π΄Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ возраст для всСх сообщСний Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ позволяСт ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² систСмах Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Если Ρƒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°Π΄Π°Π½ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ для ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Π½Ρ‹Ρ… сообщСний ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° x-message-ttl, Ρ‚ΠΎ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Π½Ρ‹Π΅ сообщСния Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ сроком ΠΆΠΈΠ·Π½ΠΈ.
  • x-expires β€” Π·Π°Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² миллисСкундах ΠΏΠΎ ΠΈΡΡ‚Π΅Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ происходит ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·Ρ€Π°ΡΡ…ΠΎΠ΄ΠΎΠ²Π°Ρ‚ΡŒ срок своСго дСйствия Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… подписчиков. Если ΠΊ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ подписчики, ΠΎΠ½Π° смоТСт автоматичСски ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° всС подписчики Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ Basic.Cancel ΠΈΠ»ΠΈ отсоСдинятся. Π‘Ρ€ΠΎΠΊ ΠΆΠΈΠ·Π½ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΊ Π½Π΅ΠΉ Π½Π΅ Π±Ρ‹Π»ΠΎ запроса Basic.Get. Π˜Π½Π°Ρ‡Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ установки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ обнуляСтся, ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ большС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ. Π’Π°ΠΊΠΆΠ΅ Π½Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ Ρ‚ΠΎΠ³ΠΎ, насколько быстро происходит ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ послС истСчСния Π΅Ρ‘ срока ΠΆΠΈΠ·Π½ΠΈ.
  • x-max-length β€” Π·Π°Π΄Π°Π΅Ρ‚ максимальноС число сообщСний Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Если число сообщСний Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ макимальноС Ρ‡ΠΈΠ»ΠΎ, Ρ‚ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ самыС старыС

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с Queues ΠΈ Bindings

  • x-max-lenght-bytes β€” Π·Π°Π΄Π°Π΅Ρ‚ максимально допустимый суммарный Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сообщСний Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. ΠŸΡ€ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ установлСнного значСния (Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ сообщСния) самыС старыС сообщСния Π½Π°Ρ‡Π½ΡƒΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ
  • x-overflow β€” Π΄Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для настройки повСдСния Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ пСрСполнСния ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Доступны Π΄Π²Π° значСния: drop-head (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΠΈ reject-publish. Если Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ drop-head, Ρ‚ΠΎ самыС старыС сообщСния Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ. Если Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ reject-publish, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌ сообщСний Π±ΡƒΠ΄Π΅Ρ‚ приостановлСн
  • x-dead-letter-exchange β€” Π·Π°Π΄Π°Π΅Ρ‚ exchange, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚Ρ‹Π΅ сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ поставлСны ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ
  • x-dead-letter-routing-key β€” Π·Π°Π΄Π°Π΅Ρ‚ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для ΠΎΡ‚Π²Π΅Ρ€Π³Π½ΡƒΡ‚Ρ‹Ρ… сообщСний
  • x-max-priority β€” Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ сортировку ΠΏΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π° 255 (RabbitMQ вСрсий 3.5.0 ΠΈ Π²Ρ‹ΡˆΠ΅). Число ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. Если Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ установлСн, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ сообщСний
  • x-queue-mode β€” позволяСт пСрСвСсти ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π² Π»Π΅Π½ΠΈΠ²Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ. Π’ Ρ‚Π°ΠΊΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС сообщСний Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π½Π° дискС. ИспользованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти Π±ΡƒΠ΄Π΅Ρ‚ минимально. Π’ случаС, Ссли ΠΎΠ½ Π½Π΅ установлСн, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сообщСния Π² памяти, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ сообщСния максимально быстро
  • x-queue-master-locator β€” Ссли Ρƒ нас кластСр, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ мастСр ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ
  • x-ha-policy β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ создании HA ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ опрСдСляСт ΠΊΠ°ΠΊ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎ ΡƒΠ·Π»Π°ΠΌ. Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ all, Ρ‚ΠΎ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π½Π° всСх ΡƒΠ·Π»Π°Ρ…. Если установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ nodes, Ρ‚ΠΎ сообщСниС Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ… кластСра
  • x-ha-nodes β€” Π·Π°Π΄Π°Π΅Ρ‚ ΡƒΠ·Π»Ρ‹, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ нСкая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ HA

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с Queues ΠΈ Bindings

Если созданиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚ΠΎ сСрвСр ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ синхронный RPC ΠΎΡ‚Π²Π΅Ρ‚ Queue.DeclareOk. Если созданиС ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» ΠΎΡ‚ΠΊΠ°Π· ΠΏΠΎ запросу Queue.Declare), Ρ‚ΠΎ ΠΊΠ°Π½Π°Π» закроСтся сСрвСром ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Channel.Close ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ OperationInterruptedException, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ошибки ΠΈ Π΅Π΅ описаниС.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Queue.Declare с Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± этой ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. НапримСр, ΠΎΠ±Ρ‰Π΅Π΅ число сообщСний, находящихся Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈ ΠΎΠ±Ρ‰Π΅Π΅ число подписанных Π½Π° Π½Π΅Ρ‘ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ.

Π’Ρ‹Π·ΠΎΠ² Queue.Declare ΠΏΠΎΠ΄ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€Π°Π²Π° Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ ΠΊΠ°Π½Π°Π» ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Channel.Close ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ OperationInterruptedException, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ ошибки 403 ΠΈ Π΅Π΅ описаниС.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ простаиваСт Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠΈ >= 10 сСкунд, ΠΎΠ½Π° Π²ΠΏΠ°Π΄Π°Π΅Ρ‚ Π² спящий Ρ€Π΅ΠΆΠΈΠΌ, вызывая GC Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΡΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΡŽ памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ для этой ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Queue Ρ‡Π΅Ρ€Π΅Π· графичСский интСрфСйс

Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² панСль администратора RabbitMQ ΠΏΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ guest (username: guest ΠΈ password: guest). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ guest ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с локального хоста. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Queues ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ Π½Π° Add a new queue. ЗаполняСм свойства:

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с Queues ΠΈ Bindings

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π°ΠΆΠΌΠ΅Ρ‚Π΅ Π½Π° Add queues, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ появится Π² ΠΎΠ±Ρ‰Π΅ΠΌ спискС.

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с Queues ΠΈ Bindings

Π©Π΅Π»Ρ‡ΠΎΠΊ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ Π΅Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ привязку ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒΡŽ, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ список consumers, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ/ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сообщСния, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ статистику.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Binding

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ привязки происходит ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ синхронного RPC запроса ΠΊ сСрвСру. Запрос осущСствляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Queue.Bind, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания привязки ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ RabbitMQ.Client:

//...
channel.QueueBind(
    queue: queueName,
    exchange: "my_exchange",
    routingKey: "my_key",
    arguments: null
);
//...

  • queue β€” имя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ
  • exchange β€” имя ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°
  • routingKey β€” ΠΊΠ»ΡŽΡ‡ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ
  • arguments β€” Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с Queues ΠΈ Bindings

Если созданиС привязки Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚ΠΎ сСрвСр ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ синхронный RPC ΠΎΡ‚Π²Π΅Ρ‚ Queue.BindOk.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Binding Ρ‡Π΅Ρ€Π΅Π· графичСский интСрфСйс

Π—Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² панСль администратора RabbitMQ ΠΏΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ guest (username: guest ΠΈ password: guest). ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ guest ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с локального хоста. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Queues ΠΈ ΠΆΠΌΠ΅ΠΌ Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ my_queue. ЗаполняСм поля Ρ€Π°Π·Π΄Π΅Π»Π° bindings:

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с Queues ΠΈ Bindings

Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π²Π²Π΅Π΄Π΅ΠΌ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ Π½Π° Bind, привязка отобразится Π² ΠΎΠ±Ρ‰Π΅ΠΌ спискС:

RabbitMQ. Π§Π°ΡΡ‚ΡŒ 3. РазбираСмся с Queues ΠΈ Bindings

Code

Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ опишСм ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈ привязку ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° C#, Ρ‚Π°ΠΊ Ссли Π±Ρ‹ Π½Π°ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для восприятия.

public interface IQueue
    {        
        string Name { get; }

        /// <summary>
        ///     Если ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ true, Ρ‚ΠΎ queue Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ постоянным. 
        ///     Она Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π½Π° дискС ΠΈ смоТСт 
        ///     ΠΏΠ΅Ρ€Π΅ΠΆΠΈΡ‚ΡŒ пСрСзапуск сСрвСра/Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°. 
        ///     Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false, Ρ‚ΠΎ queue являСтся Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ, 
        ///     ΠΊΠΎΠ³Π΄Π° сСрвСр/Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½
        /// </summary>
        bool IsDurable { get; }

        /// <summary>
        ///     Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ true, Ρ‚ΠΎ 
        ///     такая ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ 
        ///     Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ consumer-Ρƒ
        /// </summary>
        bool IsExclusive { get; }

        /// <summary>
        ///     АвтоматичСскоС ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅. 
        ///     ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π°, ΠΊΠΎΠ³Π΄Π° всС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ отсоСдинятся.
        /// </summary>
        bool IsAutoDelete { get; }

        /// <summary>
        ///     ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹
        /// </summary>
        IDictionary<string, object> Arguments { get; }
    }

public class Queue : IQueue
    {
        public Queue(
             string name, 
             bool isDurable = true, 
             bool isExclusive = false, 
             bool isAutoDelete = false, 
             IDictionary<string, object> arguments = null)
        {
            Name = name ??
                throw new ArgumentNullException(name, $"{name} must not be null");

            IsDurable = isDurable;
            IsExclusive = isExclusive;
            IsAutoDelete = isAutoDelete;
            Arguments = arguments ?? new Dictionary<string, object>();
        }

        public string Name { get; }
        public bool IsDurable { get; }
        public bool IsExclusive { get; }
        public bool IsAutoDelete { get; }
        public IDictionary<string, object> Arguments { get; }
    }

public static class QueueMode
    {       
        public const string Default = "default";
        /// <summary>
        ///     Π›Π΅Π½ΠΈΠ²Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ. Π›Π΅Π½ΠΈΠ²Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ заставит ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ 
        ///     ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС сообщСний Π½Π° дискС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ 
        ///     использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти
        /// </summary>
        public const string Lazy = "lazy";
    }

public interface IBinding
    {
        /// <summary>
        ///     ОбмСнник, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ привязкой
        /// </summary>
        IExchange Exchange { get; }

        /// <summary>
        ///     ΠšΠ»ΡŽΡ‡ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ
        /// </summary>
        string RoutingKey { get; }

        /// <summary>
        ///     ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹
        /// </summary>
        IDictionary<string, object> Arguments { get; }
    }

public class Binding : IBinding
    {
        public Binding(
             IExchange exchange, 
             string routingKey, 
             IDictionary<string, object> arguments)
        {
            Exchange = exchange;
            RoutingKey = routingKey;
            Arguments = arguments;
        }

        public IExchange Exchange { get; }
        public string RoutingKey { get; }
        public IDictionary<string, object> Arguments { get; }
    }

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