RabbitMQ. เบžเบฒเบเบ—เบต 1. เบšเบปเบ”เปเบ™เบฐเบ™เบณ. Erlang, AMQP

เบชเบฐเบšเบฒเบเบ”เบตเบ•เบญเบ™เบšเปˆเบฒเบ, Habr! เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบ›เบทเป‰เบกเปเบšเบšเบฎเบฝเบ™ - เบ›เบทเป‰เบกเบญเป‰เบฒเบ‡เบญเบตเบ‡เบ‚เบญเบ‡เบ„เบงเบฒเบกเบฎเบนเป‰เบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™ RabbitMQ เปเบฅเบฐเบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™เบ‚เปเป‰เบชเบฐเป€เบซเบ™เบตเปเบ™เบฐเบชเบฑเป‰เบ™เปเบฅเบฐเบšเบปเบ”เบชเบฐเบซเบผเบธเบš.

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ™เบทเป‰เบญเบซเบฒ

  • RabbitMQ. เบžเบฒเบเบ—เบต 1. เบšเบปเบ”เปเบ™เบฐเบ™เบณ. Erlang, AMQP เปเบฅเบฐ RPC
  • RabbitMQ. เบžเบฒเบเบ—เบต 2. เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™
  • RabbitMQ. เบžเบฒเบเบ—เบต 3. เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ„เบดเบง เปเบฅเบฐ เบเบฒเบ™เบœเบนเบเบกเบฑเบ”
  • RabbitMQ. เบชเปˆเบงเบ™เบ—เบต 4. เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบก เปเบฅเบฐเบเบญเบšเปเบกเปˆเบ™เบซเบเบฑเบ‡
  • RabbitMQ. เบชเปˆเบงเบ™เบ—เบต 5: เบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเบ‚เปเป‰เบ„เบงเบฒเบก เปเบฅเบฐ เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบ
  • RabbitMQ. เบžเบฒเบเบ—เบต 6. เบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ‚เบญเบ‡เบชเบฐเบซเบฐเบžเบฑเบ™เปเบฅเบฐเป‚เบกเบ”เบนเบ™ Shovel
  • RabbitMQ. เบชเปˆเบงเบ™ 7. เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐ Chanel
  • RabbitMQ. เบชเปˆเบงเบ™ 8. RabbitMQ เปƒเบ™ .NET
  • RabbitMQ. เบžเบฒเบเบ—เบต 9. เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก

เป‚เบ”เบเบซเบเปเป‰เบเปˆเบฝเบงเบเบฑเบš AMQP

AMQP (Advanced Message Queuing Protocol) เปเบกเปˆเบ™เป‚เบ›เป‚เบ•เบ„เบญเบ™เป€เบ›เบตเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบฅเบฐเบซเบงเปˆเบฒเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบฅเบฐเบšเบปเบš. เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เปเบกเปˆเบ™เบงเปˆเบฒเบฅเบฐเบšเบปเบšเบเปˆเบญเบเบ‚เบญเบ‡เบšเบธเบเบ„เบปเบ™ (เบซเบผเบทเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”) เบชเบฒเบกเบฒเบ”เปเบฅเบเบ›เปˆเบฝเบ™เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ•เบปเบ™เป€เบญเบ‡เบกเบฑเบเป‚เบ”เบเบœเปˆเบฒเบ™เบ™เบฒเบเบซเบ™เป‰เบฒ AMQP, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡, เบญเบฒเบ”เบˆเบฐเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบเบฒเบ™เบˆเบฑเบ”เบชเบปเปˆเบ‡, เปเบˆเบเบขเบฒเบเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เบ‚เปเป‰เบกเบนเบ™, เปเบฅเบฐเบˆเบญเบ‡เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™.

Protocol AMQP เปเบ™เบฐโ€‹เบ™เปเบฒโ€‹เบชเบฒเบกโ€‹เปเบ™เบงโ€‹เบ„เบงเบฒเบกโ€‹เบ„เบดเบ”โ€‹:

RabbitMQ. เบžเบฒเบเบ—เบต 1. เบšเบปเบ”เปเบ™เบฐเบ™เบณ. Erlang, AMQP

  • exchange (เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™เบซเบผเบทเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™) - เบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบกเบฑเบ™. เบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™ เปเบˆเบเบขเบฒเบเบ‚เปเป‰เบ„เบงเบฒเบก เปƒเบ™เปœเบถเปˆเบ‡ เบซเบผเบทเบซเบผเบฒเบเบ„เบดเบง. เบ™เบฒเบ‡ เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ›เบซเบฒเบ„เบดเบง เบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™ (binding) เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบ‚เบปเบฒเปเบฅเบฐเปเบ–เบง
  • queue (เบ„เบดเบง) - เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เปเบœเปˆเบ™ เบซเบผเบทเปƒเบ™ RAM เบ™เบฑเป‰เบ™ เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเปเบฅเบฐเปƒเบซเป‰เบชเปเบฒเป€เบ™เบปเบฒเบ‚เปเป‰เบ„เบงเบฒเบก consumers (เป€เบ–เบดเบ‡เบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบ)
  • binding (binding) โ€” เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบ—เบตเปˆโ€‹ เบšเบญเบเบˆเบธเบ”เปเบฅเบเบ›เปˆเบฝเบ™เบ—เบตเปˆเปเบ–เบงเบ‚เปเป‰เบ„เบงเบฒเบกเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™

เป‚เบ›เป‚เบ•เบ„เบญเบ™เปเบฅเปˆเบ™เบขเบนเปˆเป€เบ—เบดเบ‡ TCP / IP.

เป‚เบ”เบเบซเบเปเป‰เบเปˆเบฝเบงเบเบฑเบš Erlang

เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ repository เบ—เบตเปˆ GitHub. เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ RabbitMQ-เป€เบŠเบตเบšเป€เบงเบต เบญเบตเบ‡เปƒเบชเปˆ เป€เบญเบตเบฅเบฑเบ‡ เปเบฅเบฐ BEAM.

Erlang เบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบเบšเปเบฅเบดเบชเบฑเบ” Ericsson เปƒเบ™เบเบฒเบ‡เบŠเบธเบกเบ›เบต 1980 เป€เบ›เบฑเบ™เบฅเบฐเบšเบปเบšเป€เบงเบฅเบฒเบˆเบดเบ‡เบ—เบตเปˆเปเบˆเบเบขเบฒเบ, เบ—เบปเบ™เบ—เบฒเบ™เบ•เปเปˆเบ„เบงเบฒเบกเบœเบดเบ”, เบชเปเบฒเบฅเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบงเบฅเบฒเป€เบฎเบฑเบ”เบงเบฝเบ 99,999%. Erlang เปƒเบŠเป‰เปƒเบ™เบญเบธเบ”เบชเบฒเบซเบฐเบเปเบฒเบ•เปˆเบฒเบ‡เป†เปเบฅเบฐเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก, e.g. WhatsApp. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบก เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเบณ WhatsApp, เป€เบŠเบดเปˆเบ‡ Facebook เบŠเบทเป‰เปƒเบ™เบฅเบฒเบ„เบฒ 19 เบ•เบทเป‰เป‚เบ”เบฅเบฒ

เป‚เบ”เบเบซเบเปเป‰เบเปˆเบฝเบงเบเบฑเบš RabbitMQ

เบเบฐเบ•เปˆเบฒเบ เป€เบ›เบฑเบ™เบ™เบฒเบเบซเบ™เป‰เบฒเบ‚เปเป‰เบ„เบงเบฒเบกเปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”. เบกเบฑเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ•เบฒเบกเบซเบผเบฑเบเบเบฒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒ AMQP เบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™ เบ‚เปเป‰เบชเบฐเป€เบžเบฒเบฐ. RabbitMQ เบ›เบฐเบ•เบดเบšเบฑเบ” เปเบฅเบฐเป€เบชเบตเบกเบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒ AMQP.

เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเปƒเบ™ RabbitMQ เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™ producer (เบœเบนเป‰เป€เบœเบตเบเปเบœเปˆ) เบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป‚เบ”เบเบเบปเบ‡เบซเบฒเบ„เบดเบง. เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡, เปเบฅเบฐเป€เบฅเบทเป‰เบญเบเป†, เบœเบนเป‰เป€เบœเบตเบเปเบœเปˆเบเบฑเบ‡เบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเปเบ–เบงเปƒเบ”.

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เบœเบนเป‰เป€เบœเบตเบเปเบœเปˆเบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ›เบซเบฒเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฒเบเบœเบนเป‰เป€เบœเบตเบเปเบœเปˆ, เปเบฅเบฐเบญเบตเบเบ”เป‰เบฒเบ™เบซเบ™เบถเปˆเบ‡, เบกเบฑเบ™เบชเบปเปˆเบ‡เบžเบงเบเป€เบ‚เบปเบฒเป„เบ›เบซเบฒเปเบ–เบง. เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบ•เป‰เบญเบ‡เบฎเบนเป‰เบขเปˆเบฒเบ‡เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบกเบฑเบ™เป„เบ”เป‰เบฎเบฑเบš. เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบ„เบดเบงเบชเบฐเป€เบžเบฒเบฐเบšเป? เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบผเบฒเบเบ„เบดเบงเบšเป? เบซเบผเบทเบ‚เปเป‰เบ„เบงเบฒเบกเบ„เบงเบ™เบ–เบทเบเบฅเบฐเป€เบฅเบตเบ.

RabbitMQ. เบžเบฒเบเบ—เบต 1. เบšเบปเบ”เปเบ™เบฐเบ™เบณ. Erlang, AMQP

เบงเบฝเบเบชเบฑเป‰เบ™เป† RabbitMQ เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบญเบฐโ€‹เบ—เบดโ€‹เบšเบฒเบโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

  1. เบœเบนเป‰เป€เบœเบตเบเปเบœเปˆเบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ›เบซเบฒเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบชเบฐเป€เบžเบฒเบฐ
  2. เบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™, เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบก, เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบกเบฑเบ™เป„เบ›เบซเบฒเบซเบ™เบถเปˆเบ‡เบซเบผเบทเบซเบผเบฒเบเบ„เบดเบงเบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบšเบœเบนเบเบกเบฑเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡เบกเบฑเบ™เปเบฅเบฐเบ„เบดเบง.
  3. เปเบ–เบงเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบ™เบตเป‰. เบ‚เปเป‰เบ„เบงเบฒเบกเบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ RAM เบซเบผเบทเปƒเบ™เปเบœเปˆเบ™
  4. เป€เบกเบทเปˆเบญเบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบฒเบเปเบ–เบง, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบˆเบฐเบชเป‰เบฒเบ‡เบชเปเบฒเป€เบ™เบปเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐเบชเบปเปˆเบ‡.
  5. เบœเบนเป‰เบšเปเบฅเบดเป‚เบžเบเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเปเบฅเบฐเบชเบปเปˆเบ‡เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เบเบฑเบšเบ™เบฒเบเบซเบ™เป‰เบฒ
  6. เบ™เบฒเบเบซเบ™เป‰เบฒ, เป€เบกเบทเปˆเบญเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™, เป€เบญเบปเบฒเบชเปเบฒเป€เบ™เบปเบฒเบ‚เปเป‰เบ„เบงเบฒเบกเบญเบญเบเบˆเบฒเบเปเบ–เบง. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบฅเบถเบšเบญเบญเบเบˆเบฒเบ RAM เปเบฅเบฐเปเบœเปˆเบ™

CPR

เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ RPC (เบเบฒเบ™เป‚เบ—เบซเบฒเบ‚เบฑเป‰เบ™เบ•เบญเบ™เป„เบฅเบเบฐเป„เบ) underlies เป€เบเบทเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ›เบฐเบ•เบดเบชเปเบฒเบžเบฑเบ™เบเบฑเบšเปเบเบ™ RabbitMQ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ‚เบญเบ‡เบฅเบนเบเบ„เป‰เบฒเบเบฑเบš RabbitMQ, เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡ RPC. เป€เบกเบทเปˆเบญเบฅเปเบฒเบ”เบฑเบšเบ™เบตเป‰เบชเปเบฒเป€เบฅเบฑเบ”, RabbitMQ เบˆเบฐเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบเบญเบกเบฎเบฑเบšเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒ:

RabbitMQ. เบžเบฒเบเบ—เบต 1. เบšเบปเบ”เปเบ™เบฐเบ™เบณ. Erlang, AMQP

เบเบฑเบ‡เบขเบนเปˆเปƒเบ™เบชเบฐเป€เบžเบฒเบฐ AMQP เบ—เบฑเบ‡เบฅเบนเบเบ„เป‰เบฒเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเบฒเบกเบฒเบ”เบญเบญเบเบ„เปเบฒเบชเบฑเปˆเบ‡. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบฅเบนเบเบ„เป‰เบฒเบเปเบฒเบฅเบฑเบ‡เบฅเปเบ–เป‰เบฒเบ•เบดเบ”เบ•เปเปˆเบชเบทเปˆเบชเบฒเบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบกเปˆเบ™เบซเป‰เบญเบ‡เบฎเบฝเบ™เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡, Connection.Start - เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เป‚เบ—โ€‹ Start เบซเป‰เบญเบ‡โ€‹เบฎเบฝเบ™ Connection.

เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐเบŠเปˆเบญเบ‡เบ—เบฒเบ‡

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบฅเบฐเบซเบงเปˆเบฒเบ‡เบฅเบนเบเบ„เป‰เบฒเปเบฅเบฐเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ, เบŠเปˆเบญเบ‡เบ—เบฒเบ‡. เบŠเปˆเบญเบ‡เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบžเบฒเบเปƒเบ™ เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบฐเป€เบžเบฒเบฐ. เปเบ•เปˆเบฅเบฐเบŠเปˆเบญเบ‡เปเบกเปˆเบ™เป‚เบ”เบ”เบ”เปˆเบฝเบงเบˆเบฒเบเบŠเปˆเบญเบ‡เบญเบทเปˆเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบต synchronous, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เบšเปเปˆเป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบˆเบปเบ™เบเปˆเบงเบฒเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡.

เป€เบžเบทเปˆเบญเปƒเบซเป‰เบชเบฒเบกเบฒเบ”เบชเบปเปˆเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ™เบ‚เบฐเบซเบ™เบฒเบ™, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เป€เบ›เบตเบ”เบซเบผเบฒเบเบŠเปˆเบญเบ‡เบ—เบฒเบ‡. เปเบ•เปˆเบฅเบฐเบŠเปˆเบญเบ‡เบชเป‰เบฒเบ‡เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ 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 เปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ (server-server). เบเบฑเบ‡เปƒเบŠเป‰ plugin เป„เบ”เป‰ MQTT Plugin RabbitMQ เบŠเบถเปˆเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบญเบฐเบ™เบธเบชเบฑเบ™เบเบฒ MQTT เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเบปเปˆเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เป€เบŠเบฑเบ™โ€‹เป€เบŠเบตโ€‹เปเบฅเบฐโ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบโ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบžเบฒเบšโ€‹เปเบงเบ”โ€‹เบฅเป‰เบญเบกโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เป„เบงโ€‹เบ•โ€‹เปˆโ€‹เปโ€‹เบฒโ€‹, latency เบชเบนเบ‡ (เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆโ€‹เป€เบ•เบฑเบกโ€‹เบ‚เบญเบ‡โ€‹เป‚เบ›โ€‹เบฃโ€‹เป‚เบ•โ€‹เบ„เบญเบ™โ€‹เบชเบฐโ€‹เบซเบ™เบฑเบšโ€‹เบชเบฐโ€‹เบซเบ™เบนเบ™โ€‹เปเบกเปˆเบ™โ€‹เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เบ—เบตเปˆ เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™).

เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ•เปเปˆเป„เบ›เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเบเบฒเบ™เปเบฅเบเบ›เปˆเบฝเบ™เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เป€เบญเบเบฐเบชเบฒเบ™

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™