ΠΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΎΡ
- ΠΠ°ΡΠ°ΡΠ΅-ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ
- ΠΠ°ΡΠ°ΡΠ΅-ΡΠ°ΡΠΏΠ°ΡΡΠ΅Π½ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ
- ΠΠ΄Π³ΠΎΠ²ΠΎΡ ΡΠΎ Π±Π°ΡΠ°ΡΠ΅
- ΠΠ±ΡΠ°Π²ΠΈ-ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠΈ ΡΠ΅
- ΠΡΠ΅Π²ΡΡΠ΅Π½ΠΎ ΠΠ±ΡΠ°Π²ΠΈ-ΠΏΡΠ΅ΡΠΏΠ»Π°ΡΠΈ ΡΠ΅
- ΠΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠΈ
SOA, MSA ΠΈ ΠΏΠΎΡΠ°ΠΊΠΈ
SOA, MSA ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΈ ΠΊΠΎΠΈ Π³ΠΈ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° Π³ΡΠ°Π΄Π΅ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π΄ΠΎΠ΄Π΅ΠΊΠ° ΠΏΠΎΡΠ°ΠΊΠΈΡΠ΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π°Π°Ρ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΈ Π·Π° Π½ΠΈΠ²Π½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°.
ΠΠ΅ ΡΠ°ΠΊΠ°ΠΌ Π΄Π° ΡΠ° ΠΏΡΠΎΠΌΠΎΠ²ΠΈΡΠ°ΠΌ ΠΎΠ²Π°Π° ΠΈΠ»ΠΈ ΠΎΠ½Π°Π° ΡΠΈΡΡΠ΅ΠΌΡΠΊΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°. ΠΠ°Ρ ΡΡΠΌ Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π½Π°ΡΠ΅ΡΠΈΠΊΠ°ΡΠ½ΠΈΡΠ΅ ΠΈ Π½Π°ΡΠΊΠΎΡΠΈΡΠ½ΠΈΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π·Π° ΠΎΠ΄ΡΠ΅Π΄Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ Π±ΠΈΠ·Π½ΠΈΡ. ΠΠ΅Π· ΠΎΠ³Π»Π΅Π΄ Π½Π° ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°ΡΠ° ΡΡΠΎ ΡΠ΅ ΡΠ° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌΠ΅, ΠΏΠΎΠ΄ΠΎΠ±ΡΠΎ Π΅ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΡΠΎ ΠΏΠΎΠ³Π»Π΅Π΄ Π½Π° Unix-way: ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° ΠΏΠΎΠ²ΡΠ·Π°Π½ΠΎΡΡ, ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ Π΅Π½ΡΠΈΡΠ΅ΡΠΈ. API ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π³ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ Π½Π°ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΈ Π΄Π΅ΡΡΡΠ²Π° ΡΠΎ Π΅Π½ΡΠΈΡΠ΅ΡΠΈΡΠ΅.
ΠΠΎΡΠ°ΠΊΠΈ Π΅, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΡΠ³Π΅ΡΠΈΡΠ° ΠΈΠΌΠ΅ΡΠΎ, Π±ΡΠΎΠΊΠ΅Ρ Π·Π° ΠΏΠΎΡΠ°ΠΊΠΈ. ΠΠ΅Π³ΠΎΠ²Π°ΡΠ° Π³Π»Π°Π²Π½Π° ΡΠ΅Π» Π΅ Π΄Π° ΠΏΡΠΈΠΌΠ° ΠΈ ΠΈΡΠΏΡΠ°ΡΠ° ΠΏΠΎΡΠ°ΠΊΠΈ. Π’ΠΎΡ Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΠΈΡΠ΅ Π·Π° ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠΎΡΠΌΠΈΡΠ°ΡΠ΅ Π½Π° Π»ΠΎΠ³ΠΈΡΠΊΠΈ ΠΊΠ°Π½Π°Π»ΠΈ Π·Π° ΠΏΡΠ΅Π½ΠΎΡ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠΎΡ, ΡΡΡΠΈΡΠ°ΡΠ΅ ΠΈ Π±Π°Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅, ΠΊΠ°ΠΊΠΎ ΠΈ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ Π³ΡΠ΅ΡΠΊΠΈ Π½Π° Π½ΠΈΠ²ΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ.
ΠΠΎΡΠ°ΠΊΠ°ΡΠ° ΡΡΠΎ ΡΠ° ΡΠ°Π·Π²ΠΈΠ²Π°ΠΌΠ΅ Π½Π΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π° Π΄Π° ΡΠ΅ Π½Π°ΡΠΏΡΠ΅Π²Π°ΡΡΠ²Π° ΠΈΠ»ΠΈ Π΄Π° Π³ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈ rabbitmq. ΠΠ΅Π³ΠΎΠ²ΠΈΡΠ΅ Π³Π»Π°Π²Π½ΠΈ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ:
- ΠΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ°.
Π Π°Π·ΠΌΠ΅Π½ΡΠΊΠΈΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°Π°Ρ Π½Π° ΡΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΡ, ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ±Π»ΠΈΡΠΊΡ Π΄ΠΎ ΠΊΠΎΠ΄ΠΎΡ ΡΡΠΎ Π³ΠΈ ΠΊΠΎΡΠΈΡΡΠΈ. - ΠΠ΄Π½ΠΎΡΡΠ°Π²Π½ΠΎΡΡ.
Π€ΠΎΠΊΡΡΠΈΡΠ°ΡΡΠ΅ ΡΠ΅ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ Π½Π° ΠΊΠΎΡΠ²Π°ΡΠ° ΠΈ Π»Π΅ΡΠ½ΠΎΡΠΈΡΠ°ΡΠ° Π½Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅. - ΠΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ.
ΠΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΡΠ²Π°ΠΌΠ΅ Π΄Π° ΡΠ° ΠΏΠΎΠ²ΡΠΎΡΠΈΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ° Π½Π° rabbitmq, ΡΡΠΊΡ Π΄Π° Π³ΠΎ ΠΈΡΡΠ°ΠΊΠ½Π΅ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΠΎΠ½ΡΠΊΠΈΠΎΡ ΠΈ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΈΠΎΡ ΡΠ»ΠΎΡ, ΡΡΠΎ Π³ΠΎ Π²ΠΊΠ»ΠΎΠΏΡΠ²Π°ΠΌΠ΅ Π²ΠΎ OTP ΡΡΠΎ Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ°ΡΡΠΈ Π³ΠΈ ΡΡΠΎΡΠΎΡΠΈΡΠ΅. - Π€Π»Π΅ΠΊΡΠΈΠ±ΠΈΠ»Π½ΠΎΡΡ.
Π‘Π΅ΠΊΠΎΡΠ° ΡΡΠ»ΡΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ° ΠΌΠ½ΠΎΠ³Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π°. - ΠΡΠΏΠΎΡΠ½ΠΎΡΡ ΠΏΠΎ Π΄ΠΈΠ·Π°ΡΠ½.
- ΠΡΠΈΡΠΏΠΎΡΠΎΠ±Π»ΠΈΠ²ΠΎΡΡ.
ΠΠΎΡΠ°ΠΊΠΈ ΡΠ°ΡΡΠ΅ ΡΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΡΠ°. ΠΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π° ΠΎΠΏΡΠΎΠ²Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΠΎΡΠΊΠΈΡΠ΅ Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π° Π½Π° ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ.
ΠΠ°Π±Π΅Π»Π΅ΡΠΊΠ° ΠΠΎ ΠΎΠ΄Π½ΠΎΡ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠ΄ΠΎΡ, ΠΌΠ΅ΡΠ°-ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ ΡΠ΅ Π΄ΠΎΠ±ΡΠΎ ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ΠΈ Π·Π° ΡΠ»ΠΎΠΆΠ΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Erlang/Elixir. Π¦Π΅Π»ΠΈΠΎΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ ΡΠ΅ Π½Π°ΠΎΡΠ° Π²ΠΎ Π΅Π΄Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ - ΡΠ°Π΄ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠΎ ΠΈΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΡΠ΅ ΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ ΠΈ Π²ΡΡΠ°Ρ Π΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΠΏΠΎΡΠ΅Π±Π΅Π½ Π΅Π½ΡΠΈΡΠ΅Ρ. Π‘ΠΎ ΠΎΠ²ΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ, Π»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΠ΄ΡΠΆΡΠ²Π° API Π½Π° ΡΠ΅Π»ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ, Π»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, ΠΏΠΎΠ³ΠΎΠ΄Π½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΏΠΈΡΡΠ²Π°Π°Ρ ΡΠ΅ΡΡΠΎΠ²ΠΈ Π·Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ° ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ°.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ°Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΠΊΡ Π±ΡΠΎΠΊΠ΅Ρ. ΠΠ΄ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π° Π½Π° ΠΏΠΎΡΠ°ΠΊΠΈ, ΡΠ΅ΠΊΠΎΡΠ° ΡΡΠ»ΡΠ³Π° ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΆΠΈΠ²ΠΎΡΠ½ΠΈ ΡΠ°Π·ΠΈ:
- ΠΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°.
ΠΠΎ ΠΎΠ²Π°Π° ΡΠ°Π·Π°, ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΈ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈΡΠ΅ ΡΡΠΎ ΡΠ° ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π°Ρ ΠΈ ΡΡΠ°ΡΡΡΠ²Π°Π°Ρ. - Π‘ΠΎΠ·Π΄Π°Π²Π°ΡΠ΅ ΡΠΎΡΠΊΠ° Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π°.
Π£ΡΠ»ΡΠ³Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈ ΡΡΠ°ΡΠΈΡΠΊΠ° ΡΠΎΡΠΊΠ° Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π° Π½Π°Π²Π΅Π΄Π΅Π½Π° Π²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°ΡΠ° Π½Π° ΡΠ°Π·ΠΎΠ»ΠΎΡ ΠΈΠ»ΠΈ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΠΈ ΡΠΎΡΠΊΠΈ Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π°. - Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°.
ΠΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ° Π΄Π° Π³ΠΈ ΠΎΠΏΡΠ»ΡΠΆΡΠ²Π° Π±Π°ΡΠ°ΡΠ°ΡΠ°, ΡΠ°Π° ΠΌΠΎΡΠ° Π΄Π° Π±ΠΈΠ΄Π΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π° Π²ΠΎ ΠΌΠ΅ΡΡΠΎΡΠΎ Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π°. - ΠΠΎΡΠΌΠ°Π»Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°ΡΠ΅.
Π£ΡΠ»ΡΠ³Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄ΡΠ²Π° ΠΊΠΎΡΠΈΡΠ½Π° ΡΠ°Π±ΠΎΡΠ°. - ΠΡΠΊΠ»ΡΡΠΈ.
ΠΠΎΠΆΠ½ΠΈ ΡΠ΅ 2 ΡΠΈΠΏΠ° Π½Π° ΠΈΡΠΊΠ»ΡΡΡΠ²Π°ΡΠ΅: Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ ΠΈ ΠΈΡΠ½ΠΎ. ΠΠ° Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½ΠΎΡΠΌΠ°Π»Π½Π° ΡΠ°Π±ΠΎΡΠ°, ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΠ΅ ΠΈΡΠΊΠ»ΡΡΡΠ²Π° ΠΎΠ΄ ΠΌΠ΅ΡΡΠΎΡΠΎ Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π° ΠΈ Π·Π°ΠΏΠΈΡΠ°. ΠΠΎ ΠΈΡΠ½ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΏΠΎΡΠ°ΠΊΠΈΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π°Ρ Π΅Π΄Π½Π° ΠΎΠ΄ ΡΠΊΡΠΈΠΏΡΠΈΡΠ΅ Π·Π° ΡΠ°ΡΠ»Π²Π΅Ρ.
ΠΠ·Π³Π»Π΅Π΄Π° Π΄ΠΎΡΡΠ° ΠΊΠΎΠΌΠΏΠ»ΠΈΡΠΈΡΠ°Π½ΠΎ, Π½ΠΎ ΠΊΠΎΠ΄ΠΎΡ Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΡ ΡΡΡΠ°ΡΠ΅Π½. ΠΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΡΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ ΡΠ΅ Π±ΠΈΠ΄Π°Ρ Π΄Π°Π΄Π΅Π½ΠΈ Π²ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈΡΠ΅ ΠΌΠ°Π»ΠΊΡ ΠΏΠΎΠ΄ΠΎΡΠ½Π°.
Π Π°Π·ΠΌΠ΅Π½Π°
Π’ΠΎΡΠΊΠ°ΡΠ° Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π° Π΅ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ ΠΏΠΎΡΠ°ΠΊΠΈ ΡΡΠΎ ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π²ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ Π·Π° ΠΏΠΎΡΠ°ΠΊΠΈ. ΠΠΎ ΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΏΡΠ΅ΡΡΡΠ°Π²Π΅Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ»Ρ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ ΠΊΠΎΠΌΡΠ½ΠΈΡΠΈΡΠ°Π°Ρ ΠΏΡΠ΅ΠΊΡ ΡΠΎΡΠΊΠΈ Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π°, ΡΠΈΡΠ° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠ° ΡΠΎΡΠΌΠΈΡΠ° ΠΏΠΎΡΠ°ΠΊΠΈ.
Π¨Π΅ΠΌΠΈ Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π° Π½Π° ΠΏΠΎΡΠ°ΠΊΠΈ (ΠΠ)
ΠΠ° Π³Π»ΠΎΠ±Π°Π»Π½ΠΎ Π½ΠΈΠ²ΠΎ, ΡΠ΅ΠΌΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΌΠ΅Π½Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π΅Π»Π°Ρ Π½Π° Π΄Π²ΠΎΠ½Π°ΡΠΎΡΠ½ΠΈ ΠΈ Π΅Π΄Π½ΠΎΠ½Π°ΡΠΎΡΠ½ΠΈ. ΠΡΠ²ΠΈΡΠ΅ ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡΠ°Π°Ρ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ Π½Π° Π΄ΠΎΡΠ΄ΠΎΠ²Π½Π°ΡΠ° ΠΏΠΎΡΠ°ΠΊΠ°, Π²ΡΠΎΡΠΈΡΠ΅ Π½Π΅. ΠΠ»Π°ΡΠΈΡΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π΄Π²ΠΎΠ½Π°ΡΠΎΡΠ½Π° ΡΠ΅ΠΌΠ° Π²ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅Ρ Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΎΡ ΠΠ°ΡΠ°ΡΠ΅-ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ. ΠΠ° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΡ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
ΠΠ°ΡΠ°ΡΠ΅-ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ ΠΈΠ»ΠΈ RPC
RPC ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠΎΠ³Π° ΡΡΠ΅Π±Π° Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΠΌΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ ΠΎΠ΄ Π΄ΡΡΠ³ ΠΏΡΠΎΡΠ΅Ρ. ΠΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½Π° ΠΈΡΡΠΈΠΎΡ ΡΠ°Π·ΠΎΠ» ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ Π½Π°ΠΎΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΊΠΎΠ½ΡΠΈΠ½Π΅Π½Ρ. ΠΠΎΠ΄ΠΎΠ»Ρ Π΅ Π΄ΠΈΡΠ°Π³ΡΠ°ΠΌ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ° ΠΏΠΎΠΌΠ΅ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ ΠΏΡΠ΅ΠΊΡ ΠΏΠΎΡΠ°ΠΊΠΈ.
ΠΠΈΠ΄Π΅ΡΡΠΈ ΠΏΠΎΡΠ°ΠΊΠΈΡΠ΅ ΡΠ΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈ, Π·Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΡ ΡΠ°Π·ΠΌΠ΅Π½Π°ΡΠ° Π΅ ΠΏΠΎΠ΄Π΅Π»Π΅Π½Π° Π²ΠΎ 2 ΡΠ°Π·ΠΈ:
-
ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ Π½Π° Π±Π°ΡΠ°ΡΠ΅
messaging:request(Exchange, ResponseMatchingTag, RequestDefinition, HandlerProcess).
ΡΠ°Π·ΠΌΠ΅Π½Π° β Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎ ΠΈΠΌΠ΅ Π½Π° ΠΌΠ΅ΡΡΠΎΡΠΎ Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π°
ResponseMatchingTag β Π»ΠΎΠΊΠ°Π»Π½Π° ΠΎΠ·Π½Π°ΠΊΠ° Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΎΡ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎ ΡΠ»ΡΡΠ°Ρ Π½Π° ΠΈΡΠΏΡΠ°ΡΠ°ΡΠ΅ Π½Π° Π½Π΅ΠΊΠΎΠ»ΠΊΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ Π±Π°ΡΠ°ΡΠ° ΠΊΠΎΠΈ ΠΏΡΠΈΠΏΠ°ΡΠ°Π°Ρ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ.
ΠΠ΅ΡΠΈΠ½ΠΈΡΠΈΡΠ° Π½Π° Π±Π°ΡΠ°ΡΠ΅ - ΡΠ΅Π»ΠΎ Π·Π° Π±Π°ΡΠ°ΡΠ΅
HandlerProcess β PID Π½Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ. ΠΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅Ρ ΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ ΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠΎΡ. -
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΎΡ
handle_info(#'$msg'{exchange = EXCHANGE, tag = ResponseMatchingTag,message = ResponsePayload}, State)
ResponsePayload - ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ.
ΠΠ° ΡΠ΅ΡΠ²Π΅ΡΠΎΡ, ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠΎΡΡΠΎΠΈ ΠΎΠ΄ 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, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ ΡΠ΅ΠΌΠ° ΠΏΠΎΠ³ΠΎΠ΄Π½Π° Π·Π° ΡΠ΅ΡΠ°. ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΈΠ·Π²ΠΎΡΠΈ ΠΈ ΠΏΠΎΡΡΠΎΡΡΠ²Π°ΡΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ ΡΠΎΡΠ΅ΠΌΠ° ΠΏΠΎΠΈΠ½Π°ΠΊΠ²ΠΎ. Π‘Π»ΠΈΠΊΠ°ΡΠ° ΠΏΠΎΠΊΠ°ΠΆΡΠ²Π° ΡΠ»ΡΡΠ°Ρ ΡΠΎ Π΅Π΄Π΅Π½ ΠΏΠΎΡΡΠΎΡΡΠ²Π°Ρ ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ·Π²ΠΎΡΠΈ.
Π¨Π΅ΠΌΠ° Π½Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° Π½Π° Π·Π°Π΄Π°ΡΠΈ
Π Π΅ΡΠΈΡΠΈ ΡΠ΅ΠΊΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ Π²ΠΊΠ»ΡΡΡΠ²Π° Π·Π°Π΄Π°ΡΠΈ Π·Π° ΠΎΠ΄Π»ΠΎΠΆΠ΅Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈ, Π΄ΠΎΡΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΡΠ²Π°ΡΠ° ΠΈ ΠΏΡΠ΅Π·Π΅ΠΌΠ°ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΠΎΠ΄ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΎΠ΄ ΡΡΠ΅ΡΠΈ ΡΡΡΠ°Π½ΠΈ. ΠΡΠΎΠΏΡΡΠ½Π°ΡΠ° ΠΌΠΎΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΎΡ ΡΡΠΎ Π³ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΎΠ²ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠΆΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ°Π»ΠΈ ΡΠΎ Π΄ΠΎΠ΄Π°Π²Π°ΡΠ΅ ΡΠ°ΠΊΡΠ²Π°ΡΠΈ. Π‘Γ¨ ΡΡΠΎ Π½ΠΈ ΠΎΡΡΠ°Π½ΡΠ²Π° Π΅ Π΄Π° ΡΠΎΡΠΌΠΈΡΠ°ΠΌΠ΅ ΠΊΠ»Π°ΡΡΠ΅Ρ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ ΠΈ ΡΠ°ΠΌΠ½ΠΎΠΌΠ΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌΠ΅ Π·Π°Π΄Π°ΡΠΈΡΠ΅ ΠΌΠ΅ΡΡ Π½ΠΈΠ².
ΠΡΠ΄Π΅ Π΄Π° Π³ΠΈ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈΡΠ΅ ΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ°Π²ΡΠ²Π°Π°Ρ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΡ Π½Π° 3 ΡΠ°ΠΊΡΠ²Π°ΡΠΈ. ΠΡΡΠΈ ΠΈ Π²ΠΎ ΡΠ°Π·Π°ΡΠ° Π½Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π±Π° Π½Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅, ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΡΠ²Π° ΠΏΡΠ°ΡΠ°ΡΠ΅ΡΠΎ Π·Π° ΠΏΡΠ°Π²ΠΈΡΠ½ΠΎΡΡΠ° Π½Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π±Π°ΡΠ° ΠΈ ΠΏΡΠ΅Π»Π΅Π²Π°ΡΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΊΡΠ²Π°ΡΠΈΡΠ΅. ΠΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ°ΡΠ° Π½Π° ΠΊΡΡΠΆΠ΅Π½ ΠΏΠ°Ρ ΡΠ΅ Π±ΠΈΠ΄Π΅ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½Π° Π·Π° ΠΏΡΠ°Π²ΠΈΡΠ½ΠΎΡΡΠ°, Π° Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ ΡΠΈΡΡΠ°ΡΠΈΡΠ° Π½Π° ΠΏΡΠ΅Π»Π΅Π²Π°ΡΠ΅ Π½Π° ΡΠ°ΠΊΡΠ²Π°ΡΠΈ, ΡΠ΅ Π²ΠΎΠ²Π΅Π΄Π΅ΠΌΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΡΠ²Π°ΡΠ΅ prefetch_limit. ΠΠΎ ΠΌΠΈΠ½Π»ΠΈΠ²ΠΈ ΡΡΠ»ΠΎΠ²ΠΈ prefetch_limit ΡΠ΅ ΡΠΏΡΠ΅ΡΠΈ Π΅Π΄Π΅Π½ ΡΠΏΡΠ°Π²ΡΠ²Π°Ρ Π΄Π° Π³ΠΈ ΠΏΡΠΈΠΌΠ° ΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ.
ΠΠΎΡΠ°ΠΊΠΈ ΡΠΏΡΠ°Π²ΡΠ²Π° ΡΠΎ ΡΠ΅Π΄ΠΈΡΠΈ ΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΡΠΎΡΠ΅ΡΠΎΡΠΈΡΠ΅ Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ Π·Π°Π΄Π°ΡΠΈ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΠΏΡΠΈΡΡΠΈΠ³Π½ΡΠ²Π°Π°Ρ. ΠΠ°Π΄Π°ΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π²ΡΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈΠ»ΠΈ Π΄Π° Π½Π΅ ΡΡΠΏΠ΅Π΅:
messaging:ack(Tack)
- ΠΏΠΎΠ²ΠΈΠΊΠ°Π½ Π°ΠΊΠΎ ΠΏΠΎΡΠ°ΠΊΠ°ΡΠ° Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½Π°messaging:nack(Tack)
- ΠΏΠΎΠ²ΠΈΠΊΠ°Π½ΠΈ Π²ΠΎ ΡΠΈΡΠ΅ ΠΈΡΠ½ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ. Π¨ΡΠΎΠΌ ΡΠ΅ ΡΠ΅ Π²ΡΠ°ΡΠΈ Π·Π°Π΄Π°ΡΠ°ΡΠ°, ΠΏΠΎΡΠ°ΠΊΠΈΡΠ΅ ΡΠ΅ Π³ΠΈ ΠΏΡΠ΅Π½Π΅ΡΠ°Ρ Π½Π° Π΄ΡΡΠ³ ΡΠΏΡΠ°Π²ΡΠ²Π°Ρ.
ΠΠ° ΠΏΡΠ΅ΡΠΏΠΎΡΡΠ°Π²ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΡΠ΅ ΡΠ»ΡΡΠΈΠ» ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ΅Π½ Π½Π΅ΡΡΠΏΠ΅Ρ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ: ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΎΡ 1, ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ° ΠΏΡΠΈΠΌΠΈΠ» Π·Π°Π΄Π°ΡΠ°ΡΠ°, ΠΏΠ°Π΄Π½Π°Π» Π±Π΅Π· Π΄Π° ΠΈΠΌΠ° Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΡΠΈΡΠ°Π²ΠΈ Π½Π΅ΡΡΠΎ Π΄ΠΎ ΡΠΎΡΠΊΠ°ΡΠ° Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π°. ΠΠΎ ΠΎΠ²ΠΎΡ ΡΠ»ΡΡΠ°Ρ, ΡΠΎΡΠΊΠ°ΡΠ° Π·Π° ΡΠ°Π·ΠΌΠ΅Π½Π° ΡΠ΅ ΡΠ° ΠΏΡΠ΅ΡΡΠ»ΠΈ Π·Π°Π΄Π°ΡΠ°ΡΠ° Π½Π° Π΄ΡΡΠ³ ΡΠΏΡΠ°Π²ΡΠ²Π°Ρ ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΠΈΡΡΠ΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° Π°ΠΊΡΠΌΡΠ»ΠΈΡΠ°ΡΠ΅. ΠΠΎΡΠ°Π΄ΠΈ Π½Π΅ΠΊΠΎΡΠ° ΠΏΡΠΈΡΠΈΠ½Π°, ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ 3 ΡΠ° Π½Π°ΠΏΡΡΡΠΈ Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΈ ΠΈΡΠΏΡΠ°ΡΠΈ Π½Π°ΠΊ; ΠΊΠ°ΠΊΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ°, Π·Π°Π΄Π°ΡΠ°ΡΠ° Π±Π΅ΡΠ΅ ΠΏΡΠ΅ΡΡΠ»Π΅Π½Π° ΠΈ Π½Π° Π΄ΡΡΠ³ ΡΠΏΡΠ°Π²ΡΠ²Π°Ρ ΠΊΠΎΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠ° Π·Π°Π²ΡΡΠΈ.
ΠΡΠ΅Π»ΠΈΠΌΠΈΠ½Π°ΡΠ½ΠΎ ΡΠ΅Π·ΠΈΠΌΠ΅
ΠΠΈ ΠΎΠΏΡΠ°ΡΠΈΠ²ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ Π³ΡΠ°Π΄Π΅ΠΆΠ½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²ΠΈ Π½Π° Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ ΡΡΠ΅ΠΊΠ½Π°Π²ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ Π·Π° Π½ΠΈΠ²Π½Π°ΡΠ° ΡΠΏΠΎΡΡΠ΅Π±Π° Π²ΠΎ Erlang/Elixir.
Π‘ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΠΎΠ±ΡΠ°ΡΡΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠΈ Π·Π° Π΄Π° Π³ΠΈ ΡΠ΅ΡΠΈΡΠ΅ Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ.
ΠΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΎΡ Π΄Π΅Π» ΠΎΠ΄ ΡΠ΅ΡΠΈΡΠ°ΡΠ°, ΡΠ΅ Π³ΠΈ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΠΏΡΡΠΈΡΠ΅ ΠΏΡΠ°ΡΠ°ΡΠ° Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ, ΡΡΡΠΈΡΠ°ΡΠ΅ ΠΈ Π±Π°Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅, Π° ΠΈΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ΅ Π·Π±ΠΎΡΡΠ²Π°ΠΌΠ΅ Π·Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ½Π°ΡΠ° ΡΡΡΠ°Π½Π° Π½Π° ΠΏΡΠΈΡΠΏΠΎΡΠΎΠ±Π»ΠΈΠ²ΠΎΡΡΠ° ΠΈ ΡΠΎΠ»Π΅ΡΠ°Π½ΡΠΈΡΠ°ΡΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅.
ΠΡΠ°Ρ Π½Π° Π²ΡΠΎΡΠΈΠΎΡ Π΄Π΅Π».
Π€ΠΎΡΠΎ
ΠΠ»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° websequencediagrams.com
ΠΠ·Π²ΠΎΡ: www.habr.com