RabbitMQ αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1. αžŸαŸαž…αž€αŸ’αžαžΈαž•αŸ’αžαžΎαž˜αŸ” Erlang, AMQP

αž’αžšαž»αžŽαžŸαž½αžŸαŸ’αžαžΈ αž αžΆαž”! αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αžŸαŸ€αžœαž—αŸ…αžŸαž·αž€αŸ’αžŸαžΆ-αž―αž€αžŸαžΆαžšαž™αŸ„αž„αž“αŸƒαž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαž˜αžΌαž›αž“αŸ…αž›αžΎ 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 αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“ αžŠαŸ‚αž›αž’αžΆαž…αž’αžΆαž“αžΆαž€αžΆαžšαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“ αž…αŸ‚αž€αž…αžΆαž™αž€αžΆαžšαž•αŸ’αžŸαžΆαž™αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž‡αžΆαžœαž”αŸ’αžšαž—αŸαž‘αžŸαžΆαžšαžŠαŸ‚αž›αž…αž„αŸ‹αž”αžΆαž“αŸ”

αž–αž·αž’αžΈαž€αžΆαžš AMQP αžŽαŸ‚αž“αžΆαŸ†αž‚αŸ„αž›αž‚αŸ†αž“αž·αžαž”αžΈαŸ–

RabbitMQ αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1. αžŸαŸαž…αž€αŸ’αžαžΈαž•αŸ’αžαžΎαž˜αŸ” Erlang, AMQP

  • exchange (αž…αŸ†αžŽαž»αž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž¬αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš) - αžŸαžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž‘αŸ…αžœαžΆαŸ” αž…αŸ†αžŽαž»αž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αž…αŸ‚αž€αž…αžΆαž™αžŸαžΆαžš αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž½αžšαž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“αŸ” αž“αžΆαž„ αž”αž‰αŸ’αž‡αžΌαž“αžŸαžΆαžšαž‘αŸ…αž‡αž½αžš αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαž (binding) αžšαžœαžΆαž„αž‚αžΆαžαŸ‹αž“αž·αž„αž‡αž½αžš
  • queue (αž‡αž½αžš) - αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎαžαžΆαžŸαž¬αž€αŸ’αž“αž»αž„ RAM αž“αŸ„αŸ‡αŸ” αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžŸαžΆαžš αž“αž·αž„αž•αŸ’αžαž›αŸ‹αž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž“αŸƒαžŸαžΆαžš consumers (αžŠαž›αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹)
  • binding (αž€αžΆαžšβ€‹αž…αž„β€‹) - αž…αŸ’αž”αžΆαž”αŸ‹β€‹αž˜αž½αž™β€‹αžαžΆβ€‹ αž”αŸ’αžšαžΆαž”αŸ‹αž…αŸ†αžŽαž»αž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŠαŸ‚αž›αžαž˜αŸ’αžšαž„αŸ‹αž‡αž½αžšαžŸαžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αž½αžšαžαŸ‚αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„

αž–αž·αž’αžΈαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αžαžΆαž„αž›αžΎ TCP / IP.

αžŸαž„αŸ’αžαŸαž”αž’αŸ†αž–αžΈ Erlang

αž€αžΌαžŠαž”αŸ’αžšαž—αž–αžšαž”αžŸαŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž“αŸ… GitHub. αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ RabbitMQ αž’αžΆαžŸαŸ’αžšαŸαž™β€‹αž›αžΎ αž’αŸαž›αž‘αžΆαŸ†αž„ αž“αž·αž„ BEAM αŸ”

Erlang αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“ Ericsson αž“αŸ…αž–αžΆαž€αŸ‹αž€αžŽαŸ’αžαžΆαž›αž‘αžŸαžœαžαŸ’αžŸαžšαŸαž†αŸ’αž“αžΆαŸ† 1980 αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž–αŸαž›αžœαŸαž›αžΆαž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαžŠαŸ‚αž›αž…αŸ‚αž€αž…αžΆαž™ αž“αž·αž„αž’αžαŸ‹αž±αž“αž…αŸ†αž–αŸ„αŸ‡αž€αŸ†αž αž»αžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž‘αžΆαž˜αž‘αžΆαžšαž˜αŸ‰αŸ„αž„αž’αŸ’αžœαžΎαž€αžΆαžš 99,999%αŸ” Erlang αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž§αžŸαŸ’αžŸαžΆαž αž€αž˜αŸ’αž˜αž•αŸ’αžŸαŸαž„αŸ— αž“αž·αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αŸ†αž“αžΎαž” ឧ. WhatsApp. αž’αŸ’αž“αž€αž’αžΆαž…αž’αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘ αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ WhatsApp αžŠαŸ‚αž› Facebook αž‘αž·αž‰αž€αŸ’αž“αž»αž„αžαž˜αŸ’αž›αŸƒ ៑៩ αž–αžΆαž“αŸ‹αž›αžΆαž“αžŠαž»αž›αŸ’αž›αžΆαžš

αžŸαž„αŸ’αžαŸαž”αž’αŸ†αž–αžΈ RabbitMQ

RabbitMQ αž‚αžΊαž‡αžΆαžˆαŸ’αž˜αž½αž‰αž€αžŽαŸ’αžαžΆαž›αžŸαžΆαžšαž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αŸ” αžœαžΆαž”αž‰αŸ’αž‡αžΌαž“αžŸαžΆαžšαžαžΆαž˜αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸƒαž–αž·αž’αžΈαž€αžΆαžš αž’αŸαž’αžΉαž˜αžαŸαž—αžΈ αž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ αž›αž€αŸ’αžαžŽαŸˆαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸ. RabbitMQ αž’αž“αž»αžœαžαŸ’αž αž“αž·αž„αž”αŸ†αž–αŸαž‰αž”αž“αŸ’αžαŸ‚αž˜αž–αž·αž’αžΈαžŸαžΆαžš AMQP.

αž‚αŸ†αž“αž·αžαž…αž˜αŸ’αž”αž„αž“αŸƒαž‚αŸ†αžšαžΌαž•αŸ’αž‰αžΎαžŸαžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ RabbitMQ αžšαžΏαž„αž‚αžΊ producer (αž’αŸ’αž“αž€αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™) αž˜αž·αž“αž•αŸ’αž‰αžΎαžŸαžΆαžšαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž‡αž½αžšαž‘αŸαŸ” αž‡αžΆαž€αžΆαžšαž–αž·αž αž αžΎαž™αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ αž’αŸ’αž“αž€αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™αž˜αž·αž“αžŠαžΉαž„αžαžΆ αžαžΎαžŸαžΆαžšαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž€αžΆαž“αŸ‹αž‡αž½αžšαžŽαžΆαž˜αž½αž™αž‘αžΆαž›αŸ‹αžαŸ‚αžŸαŸ„αŸ‡αŸ”

αž•αŸ’αž‘αž»αž™αž‘αŸ…αžœαž·αž‰ αž’αŸ’αž“αž€αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™αž’αžΆαž…αž•αŸ’αž‰αžΎαžŸαžΆαžšαž‘αŸ…αž€αž“αŸ’αž›αŸ‚αž„αž”αŸ’αžαžΌαžšαž”αŸ’αžšαžΆαž€αŸ‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž˜αŸ’αž™αŸ‰αžΆαž„αžœαž·αž‰αž‘αŸ€αž αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αž‘αž½αž›αž”αžΆαž“αžŸαžΆαžšαž–αžΈαž’αŸ’αž“αž€αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™ αž αžΎαž™αž˜αŸ’αž™αŸ‰αžΆαž„αžœαž·αž‰αž‘αŸ€αž αžœαžΆαž”αž‰αŸ’αž‡αžΌαž“αž–αž½αž€αž‚αŸαž‘αŸ…αž‡αž½αžšαŸ” αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαŸ’αžšαžΌαžœαžαŸ‚αžŠαžΉαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‡αžΆαž˜αž½αž™αžŸαžΆαžšαžŠαŸ‚αž›αžœαžΆαž‘αž‘αž½αž›αž”αžΆαž“αŸ” αžαžΎβ€‹αžœαžΆβ€‹αž‚αž½αžšβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αž‘αŸ…β€‹αž‡αž½αžšβ€‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹β€‹αž˜αž½αž™? αžαžΎβ€‹αžœαžΆβ€‹αž‚αž½αžšβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αž‘αŸ…β€‹αž‡αž½αžšβ€‹αž…αŸ’αžšαžΎαž“β€‹αž¬? αž¬αžŸαžΆαžšαž‚αž½αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž˜αž·αž“αž’αžΎαž–αžΎαŸ”

RabbitMQ αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1. αžŸαŸαž…αž€αŸ’αžαžΈαž•αŸ’αžαžΎαž˜αŸ” Erlang, AMQP

αž€αžΆαžšαž„αžΆαžšαžŸαž„αŸ’αžαŸαž” RabbitMQ αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜:

  1. αž’αŸ’αž“αž€αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž•αŸ’αžŸαžΆαž™αž•αŸ’αž‰αžΎαžŸαžΆαžšαž‘αŸ…αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ”
  2. αž€αžΆαžšαžŠαŸ„αŸ‡αžŠαžΌαžšαžŠαŸ„αž™αž”αžΆαž“αž‘αž‘αž½αž›αžŸαžΆαžšαž˜αž½αž™ αž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαž‘αŸ…αž‡αž½αžšαž˜αž½αž™ αž¬αž…αŸ’αžšαžΎαž“αžŠαŸ„αž™αž’αž“αž»αž›αŸ„αž˜αžαžΆαž˜αž…αŸ’αž”αžΆαž”αŸ‹αž…αž„αžšαžœαžΆαž„αžœαžΆ αž“αž·αž„αž‡αž½αžš
  3. αž‡αž½αžšαžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž―αž€αžŸαžΆαžšαž™αŸ„αž„αž‘αŸ…αžŸαžΆαžšαž“αŸαŸ‡αŸ” αžŸαžΆαžšαžαŸ’αž›αž½αž“αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„ RAM αž¬αž“αŸ…αž›αžΎαžαžΆαžŸ
  4. αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“αž‘αž‘αž½αž›αžŸαžΆαžšαž–αžΈαž‡αž½αžš αž“αŸ„αŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αž„αŸ’αž€αžΎαžαž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž“αŸƒαžŸαžΆαžšαžαžΆαž˜αžšαž™αŸˆαžαŸ†αžŽ αž αžΎαž™αž•αŸ’αž‰αžΎ
  5. αž’αžαž·αžαž·αž‡αž“αž‘αž‘αž½αž›αž”αžΆαž“αžŸαžΆαžš αž“αž·αž„αž•αŸ’αž‰αžΎαž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αžˆαŸ’αž˜αž½αž‰αž€αžŽαŸ’αžαžΆαž›
  6. αžˆαŸ’αž˜αž½αž‰αž€αžŽαŸ’αžαžΆαž› αž“αŸ…αž–αŸαž›αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹ αžŠαž€αž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž“αŸƒαžŸαžΆαžšαž…αŸαž‰αž–αžΈαž‡αž½αžšαŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž›αž»αž”αž…αŸαž‰αž–αžΈ RAM αž“αž·αž„αžαžΆαžŸ

RPC

αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš RPC (αž€αžΆαžšαž αŸ…αžαžΆαž˜αž“αžΈαžαž·αžœαž·αž’αžΈαž–αžΈαž…αž˜αŸ’αž„αžΆαž™) αž”αž„αŸ’αž€αž”αŸ‹αž“αŸαž™αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‡αžΆαž˜αž½αž™αžŸαŸ’αž“αžΌαž› RabbitMQ. αž§αž‘αžΆαž αžšαžŽαŸ αž€αžΆαžšαž–αž·αž—αžΆαž€αŸ’αžŸαžΆαžŠαŸ†αž”αžΌαž„αž’αŸ†αž–αžΈαž›αž€αŸ’αžαžαžŽαŸ’αžŒαžšαž”αžŸαŸ‹αž’αžαž·αžαž·αž‡αž“αž‡αžΆαž˜αž½αž™ RabbitMQαž”αž„αŸ’αž αžΆαž‰αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” RPC. αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αŸ” RabbitMQ αž“αžΉαž„αžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“αž‘αž‘αž½αž›αž™αž€αžŸαŸ†αžŽαžΎαž–αžΈαž’αžαž·αžαž·αž‡αž“αŸ–

RabbitMQ αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1. αžŸαŸαž…αž€αŸ’αžαžΈαž•αŸ’αžαžΎαž˜αŸ” Erlang, AMQP

αž•αž„αžŠαŸ‚αžšαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹ AMQP αž‘αžΆαŸ†αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž’αžΆαž…αž…αŸαž‰αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž’αžαž·αžαž·αž‡αž“αž€αŸ†αž–αž»αž„αžšαž„αŸ‹αž…αžΆαŸ†αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž‚αžΊαž‡αžΆαžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαŸ” αž§αž‘αžΆαž αžšαžŽαŸ, Connection.Start - αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž αŸ… Start класса Connection.

αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž“αž·αž„αž”αžŽαŸ’αžαžΆαž‰

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž–αŸαžαŸŒαž˜αžΆαž“αž”αŸ‚αž”αž“αŸαŸ‡αžšαžœαžΆαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž†αžΆαž“αŸ‚αž›. αž†αžΆαž“αŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹. αž”αŸ‰αž»αžŸαŸ’αžαž·αŸαž“αžΈαž˜αž½αž™αŸ—αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž†αžΆαž“αŸ‚αž›αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜ αžœαžΆαž˜αž·αž“αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž”αžΆαž“αž‘αŸ αžšαž αžΌαžαžŠαž›αŸ‹αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž…αž•αŸ’αž‰αžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž”αžΆαž“ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αžΎαž€αž†αžΆαž“αŸ‚αž›αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ” αž†αžΆαž“αŸ‚αž›αž“αžΈαž˜αž½αž™αŸ—αž”αž„αŸ’αž€αžΎαžαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ Erlang αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž½αž™αž’αžΆαž…αž˜αžΆαž“αž†αžΆαž“αŸ‚αž›αž…αŸ’αžšαžΎαž“ (αž–αž αž»αž‚αž»αžŽ) αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž†αžΆαž“αŸ‚αž›αž“αžΈαž˜αž½αž™αŸ—αž˜αžΆαž“αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž“αž·αž„αžœαžαŸ’αžαž»αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž”αžŽαŸ’αžαžΆαž‰αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹ RabbitMQ αž”αŸ’αžšαžΎαž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“ αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž”αŸ‚αž”αž“αŸαŸ‡αŸ”

RabbitMQ αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1. αžŸαŸαž…αž€αŸ’αžαžΈαž•αŸ’αžαžΎαž˜αŸ” Erlang, AMQP

αž§αž‘αžΆαž αžšαžŽαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸƒαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž“αž·αž„αž†αžΆαž“αŸ‚αž›αžŠαŸ„αž™αž”αŸ’αžšαžΎ αž’αžαž·αžαž·αž‡αž“ RabbitMQ:

// ...
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)αŸ” αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž•αž„αžŠαŸ‚αžšαŸ” αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ MQTT RabbitMQ αžŠαŸ‚αž›αž‡αžΆαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž–αž·αž’αžΈαž€αžΆαžš αž˜αŸ‰αžΆαž…αž’αžΈαž’αžΈαŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαžœαžΆαž„αž§αž”αž€αžšαžŽαŸαž…αžΆαž”αŸ‹αžŸαž‰αŸ’αž‰αžΆ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αŸ’αž“αž»αž„αž”αžšαž·αžŸαŸ’αžαžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸ’αž”αžΏαž“αž™αžΊαž αž“αž·αž„αž™αžΊαžαžαŸ’αž–αžŸαŸ‹ (αž”αž‰αŸ’αž‡αžΈαž–αŸαž‰αž›αŸαž‰αž“αŸƒαž–αž·αž’αžΈαž€αžΆαžšαžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαžΆαž™αž“αŸ… αž‚αŸαž αž‘αŸ†αž–αŸαžšαž‚αž˜αŸ’αžšαŸ„αž„).

αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž”αž“αŸ’αž‘αžΆαž”αŸ‹ αž™αžΎαž„αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž’αŸ†αž–αžΈ Exchanges αž±αŸ’αž™αž”αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαž™αŸ„αž„

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹