αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ’αž›αž»αž€αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ†αž”αžΌαž„

αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ’αž›αž»αž€αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ†αž”αžΌαž„

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

  • αžŸαŸ†αžŽαžΎ - αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”
  • αž€αžΆαžšβ€‹αž†αŸ’αž›αžΎαž™β€‹αžαž”β€‹αžαžΆαž˜β€‹αž€αžΆαžšβ€‹αžŸαŸ’αž“αžΎβ€‹αžŸαž»αŸ†
  • αž†αŸ’αž›αžΎαž™αžαž”αž‡αžΆαž˜αž½αž™αžŸαŸ†αžŽαžΎ
  • αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–-αž‡αžΆαžœ
  • αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸ - αž‡αžΆαžœ
  • αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž—αžΆαžšαž€αž·αž…αŸ’αž…

SOA, MSA αž“αž·αž„αž€αžΆαžšαž•αŸ’αž‰αžΎαžŸαžΆαžš

SOA, MSA αž‚αžΊαž‡αžΆαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž…αŸ’αž”αžΆαž”αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž’αž‚αžΆαžš αžαžŽαŸˆαžŠαŸ‚αž›αž€αžΆαžšαž•αŸ’αž‰αžΎαžŸαžΆαžšαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž”αž»αž–αŸ’αžœαž”αž‘αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ”

αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž…αž„αŸ‹αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αž“αŸαŸ‡ αž¬αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž“αŸ„αŸ‡αž‘αŸαŸ” αžαŸ’αž‰αž»αŸ†αž‚αžΊαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž– αž“αž·αž„αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ αž“αž·αž„αž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ” αž’αŸ’αžœαžΈαž€αŸαžŠαŸ„αž™αžŠαŸ‚αž›αž™αžΎαž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž‚αŸ†αžšαžΌ αžœαžΆαž‡αžΆαž€αžΆαžšαž”αŸ’αžšαžŸαžΎαžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž”αŸ’αž›αž»αž€αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ„αž™αžŸαž˜αŸ’αž›αžΉαž„αž˜αžΎαž›αž›αžΎ Unix-way: αžŸαž˜αžΆαžŸαž’αžΆαžαž»αžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžαž·αž…αžαž½αž… αžŠαŸ‚αž›αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž…αŸ†αž–αŸ„αŸ‡αž’αž„αŸ’αž‚αž—αžΆαž–αž“αžΈαž˜αž½αž™αŸ—αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš API αž’αž“αž»αžœαžαŸ’αžαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αž‡αžΆαž˜αž½αž™αž’αž„αŸ’αž‚αž—αžΆαž–αŸ”

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

  • αž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αŸ”
    αž…αŸ†αžŽαž»αž…αž”αŸ’αžαžΌαžšαž”αŸ’αžšαžΆαž€αŸ‹αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž“αŸ…αž›αžΎαžαŸ’αž“αžΆαŸ†αž„αž…αž„αŸ’αž€αŸ„αž˜αž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž²αŸ’αž™αž‡αž·αžαž”αŸ†αž•αž»αžαžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž‘αŸ…αž”αžΆαž“αž…αŸ†αž–αŸ„αŸ‡αž€αžΌαžŠαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž–αž½αž€αžœαžΆαŸ”
  • αž—αžΆαž–αžŸαžΆαž˜αž‰αŸ’αž‰αŸ”
    αž•αŸ’αžαŸ„αžαž›αžΎαž€αžΆαžšαž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž€αžΌαžŠ boilerplate αž“αž·αž„αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”
  • αž€αžΆαžšαžŸαž˜αŸ’αžαŸ‚αž„αž€αžΆαž“αŸ‹αžαŸ‚αž”αŸ’αžšαžŸαžΎαžšαŸ”
    αž™αžΎαž„αž˜αž·αž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž’αŸ’αžœαžΎαž˜αž»αžαž„αžΆαžšαžšαž”αžŸαŸ‹ rabbitmq αž‘αžΎαž„αžœαž·αž‰αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžšαŸ†αž›αŸαž…αžαŸ‚αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ αž“αž·αž„αž€αžΆαžšαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“ αžŠαŸ‚αž›αž™αžΎαž„αžŸαž˜αž“αžΉαž„ OTP αžαžΆαž˜αžŠαŸ‚αž›αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“ αž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž€αžΆαžšαž…αŸ†αžŽαžΆαž™αžαž·αž…αž”αŸ†αž•αž»αžαŸ”
  • αž—αžΆαž–αž”αžαŸ‹αž”αŸ‚αž“αŸ”
    αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž“αžΈαž˜αž½αž™αŸ—αž’αžΆαž…αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαž‚αŸ†αžšαžΌαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”
  • αž—αžΆαž–αž’αž“αŸ‹αž“αžΉαž„αž€αžΆαžšαžšαž…αž“αžΆαŸ”
  • αž›αž‘αŸ’αž’αž—αžΆαž–αž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αŸ”
    αž€αžΆαžšαž•αŸ’αž‰αžΎαžŸαžΆαžšαžšαžΈαž€αž…αž˜αŸ’αžšαžΎαž“αž‡αžΆαž˜αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž”αž“αŸ’αž‘αž»αž€αž€αžΎαž“αž‘αžΎαž„ αž’αŸ’αž“αž€αž’αžΆαž…αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž…αŸ†αžŽαž»αž…αž”αŸ’αžαžΌαžšαž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αžΈαž˜αž½αž™αŸ—αŸ”

αžŸαž»αž“αŸ’αž‘αžšαž€αžαžΆαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž“αŸƒαž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž€αžΌαžŠ αž‚αž˜αŸ’αžšαŸ„αž„αž˜αŸαžαžΆαž‚αžΊαžŸαž˜αž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’ Erlang/Elixir αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αŸ” αž›αŸαžαž€αžΌαžŠαž‚αž˜αŸ’αžšαŸ„αž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αžƒαŸ’αž›αžΆαŸ†αž„αž˜αž½αž™ - αž‚αž˜αŸ’αžšαŸ„αž„αž†αŸαžαŸ’αžšαŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αžŸαŸαžœαžΆαž˜αžΈαž€αŸ’αžšαžΌαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‰αŸ‚αž€αžŠαžΆαž…αŸ‹αž–αžΈαž‚αŸ’αž“αžΆαž‡αžΆαž’αžαž·αž”αžšαž˜αžΆ αž“αž·αž„αž’αž“αž»αžœαžαŸ’αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŸαžΆαž˜αž‰αŸ’αž‰αžŠαŸ‚αž›αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž…αŸ†αž–αŸ„αŸ‡αž’αž„αŸ’αž‚αž—αžΆαž–αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™αŸ” αž‡αžΆαž˜αž½αž™αž“αžΉαž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž“αŸαŸ‡αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€αŸ’αžŸαžΆ API αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž˜αžΌαž›αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž―αž€αžαžΆαž“αž·αž„αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αŸ”

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

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

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

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš

αž…αŸ†αžŽαž»αž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αžΊαž‡αžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αž‰αžΎαžŸαžΆαžšαžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž“αŸƒαž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αžŸαž˜αžΆαžŸαž’αžΆαžαž»αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ†αžšαžΌαž•αŸ’αž‰αžΎαžŸαžΆαžšαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αžŸαž˜αžΆαžŸαž’αžΆαžαž»αž˜αžΆαž“αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžαžΆαž˜αžšαž™αŸˆαž…αŸ†αžŽαž»αž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš αžŠαŸ‚αž›αž‡αžΆαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒαž€αžΆαžšαž•αŸ’αž‰αžΎαžŸαžΆαžšαŸ”

αž‚αŸ†αžšαžΌαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαžΆαžš (MEPs)

αž‡αžΆαžŸαž€αž› αž‚αŸ†αžšαžΌαž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž’αžΆαž…αž”αŸ‚αž„αž…αŸ‚αž€αž‡αžΆαž–αžΈαžšαž•αŸ’αž›αžΌαžœ αž“αž·αž„αž•αŸ’αž›αžΌαžœαž˜αž½αž™αŸ” αž’αžαžΈαžβ€‹αžαŸ†αžŽαžΆαž„β€‹αž±αŸ’αž™β€‹αž€αžΆαžšβ€‹αž†αŸ’αž›αžΎαž™β€‹αžαž”β€‹αž‘αŸ…β€‹αž“αžΉαž„β€‹αžŸαžΆαžšβ€‹αž…αžΌαž›β€‹αž˜αž½αž™, αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž˜αž€β€‹αž˜αž·αž“β€‹αž’αŸ’αžœαžΎβ€‹αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž”αž»αžšαžΆαžŽαž“αŸƒαž›αŸ†αž“αžΆαŸ†αž–αžΈαžšαž•αŸ’αž›αžΌαžœαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ-αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž‚αžΊαž‡αžΆαž‚αŸ†αžšαžΌαž†αŸ’αž›αžΎαž™αžαž”αžŸαŸ†αžŽαžΎαŸ” αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž‚αŸ†αžšαžΌ αž“αž·αž„αž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αžšαž”αžŸαŸ‹αžœαžΆαŸ”

αžŸαŸ†αžŽαžΎαžšαž†αŸ’αž›αžΎαž™αžαž” ឬ RPC

RPC αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž‘αž‘αž½αž›αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž›αžΎ node αžŠαžΌαž…αž‚αŸ’αž“αžΆ αž¬αž“αŸ…αž›αžΎαž‘αŸ’αžœαžΈαž”αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŠαŸ’αž™αžΆαž€αŸ’αžšαžΆαž˜αž“αŸƒαž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžšαžœαžΆαž„αž’αžαž·αžαž·αž‡αž“ αž“αž·αž„ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž˜αŸ’αžšαžΎ αžαžΆαž˜αžšαž™αŸˆαžŸαžΆαžšαŸ”

αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ’αž›αž»αž€αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ†αž”αžΌαž„

αžŠαŸ„αž™αžŸαžΆαžšαž€αžΆαžšαž•αŸ’αž‰αžΎαžŸαžΆαžšαž‚αžΊαž˜αž·αž“αžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαž·αžαž·αž‡αž“ αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ‚αž„αž…αŸ‚αž€αž‡αžΆ 2 αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αŸ–

  1. αž€αŸ†αž–αž»αž„αž•αŸ’αž‰αžΎαžŸαŸ†αžŽαžΎ

    messaging:request(Exchange, ResponseMatchingTag, RequestDefinition, HandlerProcess).

    αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš - αžˆαŸ’αž˜αŸ„αŸ‡αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αž“αŸƒαž…αŸ†αžŽαž»αž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš
    ResponseMatchingTag - αžŸαŸ’αž›αžΆαž€αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαž€αžΆαžšαž•αŸ’αž‰αžΎαžŸαŸ†αžŽαžΎαžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸαŸ‡αž”αž·αž‘αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž‡αžΆαž€αž˜αŸ’αž˜αžŸαž·αž‘αŸ’αž’αž·αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž•αŸ’αžŸαŸαž„αž‚αŸ’αž“αžΆαŸ”
    αž“αž·αž™αž˜αž“αŸαž™αžŸαŸ†αžŽαžΎ - αžŸαŸ’αž“αžΎαžŸαž»αŸ†αžšαžΆαž„αž€αžΆαž™
    αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ - PID αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”

  2. αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”

    handle_info(#'$msg'{exchange = EXCHANGE, tag = ResponseMatchingTag,message = ResponsePayload}, State)

    ResponsePayload - αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αŸαž˜αžΆαž“ 2 αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž•αž„αžŠαŸ‚αžšαŸ–

  1. αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž…αŸ†αžŽαž»αž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš
  2. αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ†αžŽαžΎαžŠαŸ‚αž›αž”αžΆαž“αž‘αž‘αž½αž›

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

αž€αžΌαžŠαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ

αžαŸ„αŸ‡αž€αŸ†αžŽαžαŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ API αž€αŸ’αž“αž»αž„ api.hrlαŸ–

%% =====================================================
%%  entities
%% =====================================================
-record(time, {
  unixtime :: non_neg_integer(),
  datetime :: binary()
}).

-record(time_error, {
  code :: non_neg_integer(),
  error :: term()
}).

%% =====================================================
%%  methods
%% =====================================================
-record(time_req, {
  opts :: term()
}).
-record(time_resp, {
  result :: #time{} | #time_error{}
}).

αž…αžΌαžšαž€αŸ†αžŽαžαŸ‹αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž“αŸ…αž€αŸ’αž“αž»αž„ time_controller.erl

%% Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΉ ΠΊΠΎΠ΄. Вставив Π΅Π³ΠΎ Π² шаблон gen_server ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ сСрвис.

%% инициализация gen_server
init(Args) ->
  %% ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΎΠ±ΠΌΠ΅Π½Π°
  messaging:monitor_exchange(req_resp, ?EXCHANGE, default, self())
  {ok, #{}}.

%% ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° события ΠΏΠΎΡ‚Π΅Ρ€ΠΈ связи с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΎΠ±ΠΌΠ΅Π½Π°. Π­Ρ‚ΠΎ ΠΆΠ΅ событиС ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚, Ссли Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π° Π΅Ρ‰Π΅ Π½Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»Π°ΡΡŒ.
handle_info(#exchange_die{exchange = ?EXCHANGE}, State) ->
  erlang:send(self(), monitor_exchange),
  {noreply, State};

%% ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° API
handle_info(#time_req{opts = _Opts}, State) ->
  messaging:response_once(Client, #time_resp{
result = #time{ unixtime = time_utils:unixtime(now()), datetime = time_utils:iso8601_fmt(now())}
  });
  {noreply, State};

%% Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ gen_server
terminate(_Reason, _State) ->
  messaging:demonitor_exchange(req_resp, ?EXCHANGE, default, self()),
  ok.

αž›αŸαžαž€αžΌαžŠαž’αžαž·αžαž·αž‡αž“

αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‰αžΎαžŸαŸ†αžŽαžΎαž‘αŸ…αž€αžΆαž“αŸ‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ αž’αŸ’αž“αž€αž’αžΆαž…αž αŸ…αž‘αŸ… API αžŸαŸ†αžŽαžΎαžšαžŸαžΆαžšαž“αŸ…αž‚αŸ’αžšαž”αŸ‹αž‘αžΈαž€αž“αŸ’αž›αŸ‚αž„αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαŸ–

case messaging:request(?EXCHANGE, tag, #time_req{opts = #{}}, self()) of
    ok -> ok;
    _ -> %% repeat or fail logic
end

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

handle_info(#'$msg'{exchange = ?EXCHANGE, tag = tag, message = #time_resp{result = #time{unixtime = Utime}}}, State) ->
  ?debugVal(Utime),
  {noreply, State};

handle_info(#'$msg'{exchange = ?EXCHANGE, tag = tag, message = #time_resp{result = #time_error{code = ErrorCode}}}, State) ->
  ?debugVal({error, ErrorCode}),
  {noreply, State};

αž€αžΆαžšβ€‹αž†αŸ’αž›αžΎαž™β€‹αžαž”β€‹αžαžΆαž˜β€‹αž€αžΆαžšβ€‹αžŸαŸ’αž“αžΎβ€‹αžŸαž»αŸ†

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

αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ’αž›αž»αž€αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ†αž”αžΌαž„

αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αž›αžΎαž€αž§αž‘αžΆαž αžšαžŽαŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αž–αžΈαž€αžšαžŽαžΈαž”αŸ‚αž”αž“αŸαŸ‡αŸ–

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

αžαŸ’αž‰αž»αŸ†αž αŸ…αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαžΆαž€αŸ’αž”αžΆαž›αžšαžαž—αŸ’αž›αžΎαž„αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŽαžΆαž€αŸαžŠαŸ„αž™ សអរ 1024 αž“αŸƒ 1 MB αž‚αžΊαž›αŸ’αž’αž‡αžΆαž„αžŸαžΆαžšαžαŸ‚αž˜αž½αž™αž“αŸƒ 1 GB αŸ”

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

αž†αŸ’αž›αžΎαž™αžαž”αž‡αžΆαž˜αž½αž™αžŸαŸ†αžŽαžΎ

αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αžŠαŸαž€αž˜αŸ’αžšαž“αŸƒαž›αŸ†αž“αžΆαŸ† RPC αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαž’αž”αŸ‹αŸ”

αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ’αž›αž»αž€αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ†αž”αžΌαž„

αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–-αž‡αžΆαžœ (αž˜αŸ‚αž€αž’αžΆαž„αž…αŸ‚αž€αž…αžΆαž™αž‘αž·αž“αŸ’αž“αž“αŸαž™)

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

αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ’αž›αž»αž€αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ†αž”αžΌαž„

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

αžαŸ„αŸ‡αž˜αžΎαž›αž›αŸαžαž€αžΌαžŠαž’αŸ’αž“αž€αž‡αžΆαžœαŸ–

init(_Args) ->
  %% подписываСмся Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΠΊ, ΠΊΠ»ΡŽΡ‡ = key
  messaging:subscribe(?SUBSCRIPTION, key, tag, self()),
  {ok, #{}}.

handle_info(#exchange_die{exchange = ?SUBSCRIPTION}, State) ->
  %% Ссли Ρ‚ΠΎΡ‡ΠΊΠ° ΠΎΠ±ΠΌΠ΅Π½Π° нСдоступна, Ρ‚ΠΎ пытаСмся ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ
  messaging:subscribe(?SUBSCRIPTION, key, tag, self()),
  {noreply, State};

%% ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΠ΅ сообщСния
handle_info(#'$msg'{exchange = ?SUBSCRIPTION, message = Msg}, State) ->
  ?debugVal(Msg),
  {noreply, State};

%% ΠΏΡ€ΠΈ остановкС потрСбитСля - ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π°
terminate(_Reason, _State) ->
  messaging:unsubscribe(?SUBSCRIPTION, key, tag, self()),
  ok.

αž”αŸ’αžšαž—αž–β€‹αž’αžΆαž…β€‹αž αŸ…β€‹αž‘αŸ…β€‹αž˜αž»αžαž„αžΆαžšβ€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™β€‹αžŸαžΆαžšβ€‹αž“αŸ…β€‹αž€αž“αŸ’αž›αŸ‚αž„β€‹αžŽαžΆβ€‹αžŠαŸ‚αž›β€‹αž„αžΆαž™β€‹αžŸαŸ’αžšαž½αž›αŸ–

messaging:publish_message(Exchange, Key, Message).

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš - αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸƒαž…αŸ†αžŽαž»αž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžš,
αž‚αž“αŸ’αž›αžΉαŸ‡ - αž‚αž“αŸ’αž›αžΉαŸ‡αž•αŸ’αž›αžΌαžœ
សអរ - αž”αž“αŸ’αž‘αž»αž€

αž”αŸ„αŸ‡αž–αž»αž˜αŸ’αž–αž”αž‰αŸ’αž…αŸ’αžšαžΆαžŸ - αž‡αžΆαžœ

αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ’αž›αž»αž€αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ†αž”αžΌαž„

αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž–αž„αŸ’αžšαžΈαž€ pub-sub αž’αŸ’αž“αž€αž’αžΆαž…αž‘αž‘αž½αž›αž”αžΆαž“αž›αŸ†αž“αžΆαŸ†αžŠαŸ‚αž›αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αžαŸ‹αžαŸ’αžšαžΆαŸ” αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž”αŸ’αžšαž—αž– αž“αž·αž„αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αžΆαž…αžαž»αžŸαž‚αŸ’αž“αžΆαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αŸ” αžαž½αžšαž›αŸαžαž”αž„αŸ’αž αžΆαž‰αž–αžΈαž€αžšαžŽαžΈαžŠαŸ‚αž›αž˜αžΆαž“αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž˜αŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αž”αŸ’αžšαž—αž–αž…αŸ’αžšαžΎαž“αŸ”

αž‚αŸ†αžšαžΌαž…αŸ‚αž€αž…αžΆαž™αž—αžΆαžšαž€αž·αž…αŸ’αž…

αžŸαŸ’αž‘αžΎαžšαžαŸ‚αž‚αŸ’αžšαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž“αžΉαž„αž€αž·αž…αŸ’αž…αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž–αž“αŸ’αž™αžΆαžšαž–αŸαž› αžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαž”αžΆαž™αž€αžΆαžšαžŽαŸ αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„ αž“αž·αž„αž€αžΆαžšαž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž—αžΆαž‚αžΈαž‘αžΈαž”αžΈαŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž”αŸ†αž–αŸαž‰αž—αžΆαžšαž€αž·αž…αŸ’αž…αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŠαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜αž§αž”αž€αžšαžŽαŸαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αŸ” αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž“αŸ…αžŸαŸαžŸαžŸαž›αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž‚αžΊαž”αž„αŸ’αž€αžΎαžαž‡αžΆαž…αž„αŸ’αž€αŸ„αž˜αž“αŸƒ processors αž“αž·αž„αž…αŸ‚αž€αž…αžΆαž™αž—αžΆαžšαž€αž·αž…αŸ’αž…αž±αŸ’αž™αžŸαŸ’αž˜αžΎαž‚αŸ’αž“αžΆαžšαžœαžΆαž„αž–αž½αž€αž‚αŸαŸ”

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

αž€αžΆαžšαž•αŸ’αž‰αžΎαžŸαžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‡αž½αžš αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αžΆαž‘αž·αž—αžΆαž–αŸ” αž’αŸ’αž“αž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“αž—αžΆαžšαž€αž·αž…αŸ’αž…αž“αŸ…αž–αŸαž›αž–αž½αž€αž‚αŸαž˜αž€αžŠαž›αŸ‹αŸ” αž€αž·αž…αŸ’αž…αž€αžΆαžšαž’αžΆαž…αž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™ αž¬αž”αžšαžΆαž‡αŸαž™αŸ–

  • messaging:ack(Tack) - αž”αžΆαž“αž αŸ…αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžŸαžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™
  • messaging:nack(Tack) - αž”αžΆαž“αž αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ’αžαžΆαž“αž—αžΆαž–αž’αžΆαžŸαž“αŸ’αž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αž·αž…αŸ’αž…αž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž‚αž›αŸ‹αž˜αž€αžœαž·αž‰ αž€αžΆαžšαž•αŸ’αž‰αžΎαžŸαžΆαžšαž“αžΉαž„αž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαž‘αŸ…αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

αž€αžΆαžšαž€αžŸαžΆαž„αž”αŸ’αž›αž»αž€αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸ†αž”αžΌαž„

αž§αž”αž˜αžΆαžαžΆαž€αžΆαžšαž”αžšαžΆαž‡αŸαž™αžŸαŸ’αž˜αž»αž‚αŸ’αžšαžŸαŸ’αž˜αžΆαž‰αž˜αž½αž™αž”αžΆαž“αž€αžΎαžαž‘αžΎαž„αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž—αžΆαžšαž€αž·αž…αŸ’αž…αž”αžΈ: αžαž½αžšαž€αŸ’αž”αžΆαž› 1 αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž—αžΆαžšαž€αž·αž…αŸ’αž…αž”αžΆαž“αž‚αžΆαŸ†αž„αžŠαŸ„αž™αž˜αž·αž“αž˜αžΆαž“αž–αŸαž›αžœαŸαž›αžΆαžŠαžΎαž˜αŸ’αž”αžΈαžšαžΆαž™αž€αžΆαžšαžŽαŸαž’αŸ’αžœαžΈαž‘αŸ…αž…αŸ†αžŽαž»αž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡ αž…αŸ†αžŽαž»αž…αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž“αžΉαž„αž•αŸ’αž‘αŸαžšαž—αžΆαžšαž€αž·αž…αŸ’αž…αž‘αŸ…αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αžŸαŸ‹αž–αŸαž› ack αž”αžΆαž“αž•αž»αžαž€αŸ†αžŽαžαŸ‹αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‘αžΈ 3 αž”αžΆαž“αž”αŸ„αŸ‡αž”αž„αŸ‹αž€αž·αž…αŸ’αž…αž€αžΆαžšαž“αŸ„αŸ‡ αž αžΎαž™αž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“ nack αž‡αžΆαž›αž‘αŸ’αž’αž•αž› αž—αžΆαžšαž€αž·αž…αŸ’αž…αž€αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‘αŸαžšαž‘αŸ…αž±αŸ’αž™αž’αŸ’αž“αž€αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αžœαžΆαžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αŸ”

αžŸαž„αŸ’αžαŸαž”αž”αž‹αž˜

αž™αžΎαž„αž”αžΆαž“αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž›αžΎαž”αŸ’αž›αž»αž€αž’αž‚αžΆαžšαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž…αŸ‚αž€αž…αžΆαž™ αž“αž·αž„αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž’αŸ†αž–αžΈαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž“αŸ…αž€αŸ’αž“αž»αž„ Erlang/Elixir αŸ”

αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αŸƒαž‚αŸ†αžšαžΌαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαžαž‚αŸ†αžšαžΌαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰ αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž€αžΎαžαž˜αžΆαž“αŸ”

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

αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž•αŸ’αž“αŸ‚αž€αž‘αžΈαž–αžΈαžšαŸ”

αžšαžΌαž”αžαž Marius Christensen
αžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αž…αŸ†αžŠαŸ„αž™αž”αŸ’αžšαžΎ websequencediagrams.com

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

αž‘αž·αž‰αž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž˜αžΆαž“αž€αžΆαžšαž€αžΆαžšαž–αžΆαžš DDoS, αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS VDS πŸ”₯ αž‘αž·αž‰αžŸαŸαžœαžΆαž”αž„αŸ’αž αŸ„αŸ‡αž‚αŸαž αž‘αŸ†αž–αŸαžšαžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αžΆαžšαž–αžΆαžš DDoS αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS VDS | ProHoster