Queue
(ΠΎΡΠ΅ΡΠ΅Π΄Ρ) β ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ
Π½Π° Π΄ΠΈΡΠΊΠ΅ ΠΈΠ»ΠΈ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Ρ
ΡΠ°Π½ΠΈΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΎΡΠ΄Π°Π΅Ρ ΠΈΡ
ΠΊΠΎΠΏΠΈΠΈ consumers
(ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΌ). Queue
ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ
Binding
(ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ°) β ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΡ Π² ΠΊΠ°ΠΊΡΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
ΠΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅
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. ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³
ΠΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ
ΠΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ autoDelete
, ΡΠΎ ΡΠ°ΠΊΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠ±ΡΠ΅ΡΠ°Π΅Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ΅Π±Ρ. Π’Π°ΠΊΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΄Π°Π»ΡΡΡΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΠΈΡΡ.
ΠΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ exclusive
, ΡΠΎ ΡΠ°ΠΊΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΈ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ Π΅ΡΠ»ΠΈ Π·Π°ΠΊΡΠΎΠ΅ΡΡΡ ΠΊΠ°Π½Π°Π». ΠΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ ΠΏΠΎΠΊΠ° ΠΊΠ°Π½Π°Π» Π½Π΅ Π·Π°ΠΊΡΠΎΠ΅ΡΡΡ, ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡΡΡ/ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ exclusive
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ autoDelete
Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠ°.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ:
- ΠΏΡΠΈ ΠΊΡΠ°ΡΠΊΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΌ ΡΠ°Π·ΡΡΠ²Π΅ ΡΠ²ΡΠ·ΠΈ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ΅ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡ Π½Π΅ ΡΡΠΏΠ΅Π»ΠΈ Π΄ΠΎΠΉΡΠΈ Π΄ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ
- ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΉΠΌΠ°ΡΡ ΡΠ΅Π½ΠΎΠΌΠ΅Π½
binding churn
. Π€Π΅Π½ΠΎΠΌΠ΅Π½ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ/ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΎΠΊ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. Π ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ»Π·Π°ΡΡΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ·Π»Π°ΠΌ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π±ΠΎΠ»ΡΡΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ. ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π·Π° ΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ
ΠΠΎΡΡΠΎΡΠ½Π½ΡΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ
ΠΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ durable
, ΡΠΎ ΡΠ°ΠΊΠ°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ ΡΠ²ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°/Π±ΡΠΎΠΊΠ΅ΡΠ°. ΠΠ°Π½Π½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ Queue.Delete
.
Highly Available ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ
ΠΡΠ΅ΡΠ΅Π΄ΠΈ HA ΡΡΠ΅Π±ΡΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Ρ RabbitMQ. Π ΠΊΠ»Π°ΡΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°Ρ , ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ , ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ°Ρ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½Π° Π½Π° Π²ΡΠ΅ ΡΠ·Π»Ρ.
ΠΠΎΠ³Π΄Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΡΡΡ Π² ΠΊΠ°ΠΊΡΡ-ΡΠΎ HA ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΎΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ·Π»Π΅, ΠΎΡΠ½ΠΎΡΡΡΠ΅ΠΌΡΡΡ ΠΊ HA ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅ΡΡΡ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ ΠΈΠ· ΡΠ·Π»ΠΎΠ², Π²ΡΠ΅ ΠΊΠΎΠΏΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΡΠ΄Π°Π»Π΅Π½Ρ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·Π»Π°Ρ .
ΠΡΠ΅ΡΠ΅Π΄ΠΈ HA ΠΌΠΎΠ³ΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ Π½Π° Π²ΡΠ΅ ΡΠ·Π»Ρ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΠ΅.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ:
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ HA ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π°ΠΊΠ°Π·Π°Π½ΠΈΡΠΌ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π½Π΅ΠΊΡΡ HA ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈΠ»ΠΈ ΠΏΡΠΈ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· HA ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ RabbitMQ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ·Π»Π°ΠΌ (2-3 ΡΠ·Π»Π° ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ)
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ³ΠΎ RPC
Π·Π°ΠΏΡΠΎΡΠ° ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ. ΠΠ°ΠΏΡΠΎΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Queue.Declare
, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ:
- Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ
- Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ
// ...
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
β Π·Π°Π΄Π°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΡΠ»ΠΈ ΡΠΈΡΠ»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ ΠΌΠ°ΠΊΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΠ»ΠΎ, ΡΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ΄Π°Π»ΡΡΡΡΡ ΡΠ°ΠΌΡΠ΅ ΡΡΠ°ΡΡΠ΅
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
ΠΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ RPC
ΠΎΡΠ²Π΅Ρ Queue.DeclareOk
. ΠΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ (ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π» ΠΎΡΠΊΠ°Π· ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ Queue.Declare
), ΡΠΎ ΠΊΠ°Π½Π°Π» Π·Π°ΠΊΡΠΎΠ΅ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Channel.Close
ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΠ²ΡΠΎΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² Queue.Declare
Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π²Π΅ΡΠ½Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΠΈ ΠΎΠ±ΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Π½ΡΡ
Π½Π° Π½Π΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Π΅ΠΉ.
ΠΡΠ·ΠΎΠ² Queue.Declare
ΠΏΠΎΠ΄ ΡΡΠ΅ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½Π΅ Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΡΠ°Π²Π° Π·Π°ΠΊΡΠΎΠ΅Ρ ΠΊΠ°Π½Π°Π» ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Channel.Close
ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΠΎΡΡΠ°ΠΈΠ²Π°Π΅Ρ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠΈ >= 10 ΡΠ΅ΠΊΡΠ½Π΄, ΠΎΠ½Π° Π²ΠΏΠ°Π΄Π°Π΅Ρ Π² ΡΠΏΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ, Π²ΡΠ·ΡΠ²Π°Ρ GC Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π΄Π»Ρ ΡΡΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Queue ΡΠ΅ΡΠ΅Π· Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠ°Π½Π΅Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° RabbitMQ
ΠΏΠΎΠ΄ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ guest
(username: guest
ΠΈ password: guest
). ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ guest
ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ
ΠΎΡΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ Queues
ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ Π½Π° Add a new queue
. ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°:
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ Π²Π²Π΅Π΄Π΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π½Π°ΠΆΠΌΠ΅ΡΠ΅ Π½Π° Add queues
, ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅.
Π©Π΅Π»ΡΠΎΠΊ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π΅Π΅ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΡΡ, ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ consumers
, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ/ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Binding
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ³ΠΎ RPC
Π·Π°ΠΏΡΠΎΡΠ° ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ. ΠΠ°ΠΏΡΠΎΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Queue.Bind
, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ:
- Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ
- Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΎΡΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π°
- Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ
ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ
//...
channel.QueueBind(
queue: queueName,
exchange: "my_exchange",
routingKey: "my_key",
arguments: null
);
//...
queue
β ΠΈΠΌΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈexchange
β ΠΈΠΌΡ ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊΠ°routingKey
β ΠΊΠ»ΡΡ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΠΈarguments
β Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
ΠΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ RPC
ΠΎΡΠ²Π΅Ρ Queue.BindOk
.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Binding ΡΠ΅ΡΠ΅Π· Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠ°Π½Π΅Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° RabbitMQ
ΠΏΠΎΠ΄ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ guest
(username: guest
ΠΈ password: guest
). ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ guest
ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Ρ
ΠΎΡΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡ Queues
ΠΈ ΠΆΠΌΠ΅ΠΌ Π½Π° ΠΎΡΠ΅ΡΠ΅Π΄Ρ my_queue
. ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΏΠΎΠ»Ρ ΡΠ°Π·Π΄Π΅Π»Π° bindings
:
ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ Π²Π²Π΅Π΄Π΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ Π½Π°ΠΆΠΌΠ΅ΠΌ Π½Π° Bind
, ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡΡ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅:
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