рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ. рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ. рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╣рдордиреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдиреАрдВрд╡ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдЕрдм рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдПрд░реНрд▓рд╛рдВрдЧ/рдПрд▓рд┐рдХреНрд╕рд┐рд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдФрд░ рдЙрдирдореЗрдВ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ:

  • рдЕрдиреБрд░реЛрдз рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
  • рдЕрдиреБрд░реЛрдз-рдЦрдВрдбрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
  • рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛
  • рдкреНрд░рдХрд╛рд╢рд┐рдд: рд╕рджрд╕реНрдп рдмрдирдиреЗ
  • рдЙрд▓рдЯрд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд-рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ
  • рдХрд╛рд░реНрдп рд╡рд┐рддрд░рдг

рдПрд╕рдУрдП, рдПрдордПрд╕рдП рдФрд░ рдореИрд╕реЗрдЬрд┐рдВрдЧ

рдПрд╕рдУрдП, рдПрдордПрд╕рдП рд╕рд┐рд╕реНрдЯрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реИрдВ рдЬреЛ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдпрд╛ рдЙрд╕ рд╕рд┐рд╕реНрдЯрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ред рдореИрдВ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдФрд░ рдЙрдкрдпреЛрдЧреА рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред рд╣рдо рдЬреЛ рднреА рдкреНрд░рддрд┐рдорд╛рди рдЪреБрдиреЗрдВ, рдпреВрдирд┐рдХреНрд╕-рд╡реЗ рдкрд░ рдирдЬрд░ рд░рдЦрддреЗ рд╣реБрдП рд╕рд┐рд╕реНрдЯрдо рдмреНрд▓реЙрдХ рдмрдирд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ: рдиреНрдпреВрдирддрдо рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рд╡рд╛рд▓реЗ рдШрдЯрдХ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ред рдПрдкреАрдЖрдИ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдВрднрд╡ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддреА рд╣реИрдВред

рдореИрд╕реЗрдЬрд┐рдВрдЧ, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдПрдХ рдореИрд╕реЗрдЬ рдмреНрд░реЛрдХрд░ рд╣реИред рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢реНрдп рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рднреЗрдЬрдирд╛ рд╣реИред рдпрд╣ рд╕реВрдЪрдирд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕, рд╕рд┐рд╕реНрдЯрдо рдХреЗ рднреАрддрд░ рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд░реНрдХрд┐рдХ рдЪреИрдирд▓реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг, рд░реВрдЯрд┐рдВрдЧ рдФрд░ рд╕рдВрддреБрд▓рди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рд╕реНрддрд░ рдкрд░ рдЧрд▓рддреА рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рд╣рдо рдЬреЛ рдореИрд╕реЗрдЬрд┐рдВрдЧ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ RabbitMQ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рдиреЗ рдпрд╛ рдЙрд╕рдХреА рдЬрдЧрд╣ рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

  • рд╡рд┐рддрд░рдгред
    рд╕рднреА рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбреНрд╕ рдкрд░ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреЙрдЗрдВрдЯ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрд╕ рдХреЛрдб рдХреЗ рдХрд░реАрдм рдЬреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • рд╕рд╛рджрдЧреАред
    рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рдиреНрдпреВрдирддрдо рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
  • рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рдиред
    рд╣рдо RabbitMQ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдФрд░ рдкрд░рд┐рд╡рд╣рди рдкрд░рдд рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рд▓рд╛рдЧрдд рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реБрдП рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓рддрд╛ рд╕реЗ OTP рдореЗрдВ рдлрд┐рдЯ рдХрд░рддреЗ рд╣реИрдВред
  • рд▓рдЪреАрд▓рд╛рдкрдиред
    рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХрдИ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред
  • рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд▓рдЪреАрд▓рд╛рдкрди.
  • рдорд╛рдкрдиреАрдпрддрд╛ред
    рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдореИрд╕реЗрдЬрд┐рдВрдЧ рдмрдврд╝рддреА рд╣реИ. рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рд▓реЛрдб рдмрдврд╝рддрд╛ рд╣реИ, рдЖрдк рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреЙрдЗрдВрдЯ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╢реАрдиреЛрдВ рдкрд░ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдиреЛрдЯред рдХреЛрдб рд╕рдВрдЧрдарди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдореЗрдЯрд╛-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬрдЯрд┐рд▓ рдПрд░реНрд▓рд╛рдВрдЧ/рдПрд▓рд┐рдХреНрд╕рд┐рд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред рд╕рднреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА - рдПрдХ рдЕрдореНрдмреНрд░реЗрд▓рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ - рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рд╕рд╛рде рд╣реА, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдЕрдзрд┐рдХрддрдо рд░реВрдк рд╕реЗ рдкреГрдердХ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЗрдХрд╛рдИ рдФрд░ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рд╕рд┐рд╕реНрдЯрдо рдШрдЯрдХ рд╕реАрдзреЗ рдпрд╛ рдмреНрд░реЛрдХрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрджреЗрд╢-рд╕реЗрд╡рд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЗ рдХрдИ рдЬреАрд╡рди рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:

  • рд╕реЗрд╡рд╛ рдЖрд░рдВрднреАрдХрд░рдг.
    рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╕реЗрд╡рд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рддреА рд╣реИрдВред
  • рдПрдХ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдмрдирд╛рдирд╛.
    рд╕реЗрд╡рд╛ рдиреЛрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд┐рд░ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИ, рдпрд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдмрдирд╛ рд╕рдХрддреА рд╣реИред
  • рд╕реЗрд╡рд╛ рдкрдВрдЬреАрдХрд░рдг.
    рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдХреЛ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдкрд░ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рдордХрд╛рдЬ.
    рд╕реЗрд╡рд╛ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ.
  • рд╢рдЯ рдбрд╛рдЙрдиред
    рд╢рдЯрдбрд╛рдЙрди 2 рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрднрд╡ рд╣реИрдВ: рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЖрдкрд╛рддрдХрд╛рд▓реАрдиред рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рд╕реЗрд╡рд╛ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдореИрд╕реЗрдЬрд┐рдВрдЧ рдлреЗрд▓рдУрд╡рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдЙрддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдПрдХреНрд╕рдЪреЗрдВрдЬреЛрдВ

рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреНрд╡рд╛рдЗрдВрдЯ рдПрдХ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рднреАрддрд░ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдШрдЯрдХ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рд╕рдВрджреЗрд╢ рдмрдирддрд╛ рд╣реИред

рд╕рдВрджреЗрд╢ рд╡рд┐рдирд┐рдордп рдкреИрдЯрд░реНрди (рдПрдордИрдкреА)

рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░, рд╡рд┐рдирд┐рдордп рдкреИрдЯрд░реНрди рдХреЛ рджреЛ-рддрд░рдлрд╝рд╛ рдФрд░ рдПрдХ-рддрд░рдлрд╝рд╛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдирд╣реАрдВред рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ рджреЛ-рддрд░рдлрд╝рд╛ рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрд░реЛрдз-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреИрдЯрд░реНрди рд╣реИред рдЖрдЗрдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдЙрд╕рдХреЗ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред

рдЕрдиреБрд░реЛрдз-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╛ рдЖрд░рдкреАрд╕реА

RPC рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╣реА рдиреЛрдб рдкрд░ рдЪрд▓ рд░рд╣реА рд╣реЛ рд╕рдХрддреА рд╣реИ рдпрд╛ рдХрд┐рд╕реА рднрд┐рдиреНрди рдорд╣рд╛рджреНрд╡реАрдк рдкрд░ рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдиреАрдЪреЗ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХрд╛ рдПрдХ рдЪрд┐рддреНрд░ рд╣реИред

рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ. рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдЪреВрдБрдХрд┐ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╣реИ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ 2 рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  1. рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

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

    рд╡рд┐рдирд┐рдордп тАТ рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рдирд╛рдо
    рд░рд┐рд╕реНрдкреЙрдиреНрд╕рдореИрдЪрд┐рдВрдЧрдЯреИрдЧ - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд▓реЗрдмрд▓ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдИ рд╕рдорд╛рди рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред
    рдЕрдиреБрд░реЛрдзрдкрд░рд┐рднрд╛рд╖рд╛ - рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп
    рд╣реИрдВрдбрд▓рд░рдкреНрд░рдХреНрд░рд┐рдпрд╛ - рд╣реИрдВрдбрд▓рд░ рдХреА рдкреАрдЖрдИрдбреАред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА.

  2. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛

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

    рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдкреЗрд▓реЛрдб - рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛.

рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 2 рдЪрд░рдг рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  1. рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛
  2. рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг

рдЖрдЗрдП рдЗрд╕ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд╕реЗрд╡рд╛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХрд▓ рд╕рдЯреАрдХ рд╕рдордп рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред

рд╕рд░реНрд╡рд░ рдХреЛрдб

рдЖрдЗрдП api.hrl рдореЗрдВ рд╕реЗрд╡рд╛ API рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

%% =====================================================
%%  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.

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб

рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдХрд╣реАрдВ рднреА рдореИрд╕реЗрдЬрд┐рдВрдЧ рдЕрдиреБрд░реЛрдз рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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 рд╕рдВрджреЗрд╢ 1 рдЬреАрдмреА рдХреЗ рдПрдХ рд╕рдВрджреЗрд╢ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВред

рдПрд░рд▓рд╛рдВрдЧ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд▓рд╛рдн рдорд┐рд▓рддрд╛ рд╣реИ - рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреЙрдЗрдВрдЯ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд▓реЛрдб рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреЙрдЗрдВрдЯ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рддреБрд░рдВрдд рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреЛ рднреЗрдЬ рджреА рдЬрд╛рддреА рд╣реИрдВред

рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдпрд╣ рдбрд╛рдпрд▓реЙрдЧ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рдкреАрд╕реА рдкреИрдЯрд░реНрди рдХрд╛ рдПрдХ рджреБрд░реНрд▓рдн рд╕рдВрд╢реЛрдзрди рд╣реИред

рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ. рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдкреНрд░рдХрд╛рд╢рд┐рдд-рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ (рдбреЗрдЯрд╛ рд╡рд┐рддрд░рдг рд╡реГрдХреНрд╖)

рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рд╣реЛрддреЗ рд╣реА рдЗрд╡реЗрдВрдЯ-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдЙрдиреНрд╣реЗрдВ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреБрд▓ рдпрд╛ рдкреЛрд▓ рдореЙрдбрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреБрд╢ рдореЙрдбрд▓ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдзрд┐рдХ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
рдпрд╣ рдЖрдВрдХрдбрд╝рд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╖рдп рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХреЛ рд╕рдВрджреЗрд╢ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ. рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдЗрд╕ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд░рд╛рдЬреНрдп рдХрд╛ рд╡рд┐рддрд░рдг рд╣реИрдВ: рдХрдВрдкреНрдпреВрдЯрд░ рдЧреЗрдо рдореЗрдВ рдЧреЗрдо рдХреА рджреБрдирд┐рдпрд╛, рдПрдХреНрд╕рдЪреЗрдВрдЬреЛрдВ рдкрд░ рдмрд╛рдЬрд╛рд░ рдбреЗрдЯрд╛, рдбреЗрдЯрд╛ рдлрд╝реАрдб рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реАред

рдЖрдЗрдП рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЛрдб рджреЗрдЦреЗрдВ:

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).

рд╡рд┐рдирд┐рдордп - рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдХрд╛ рдирд╛рдо,
рдХреБрдВрдЬреА - рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА
рдореИрд╕реЗрдЬ - рдкреЗрд▓реЛрдб

рдЙрд▓рдЯрд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд-рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ

рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ. рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдкрдм-рд╕рдм рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ, рдЖрдк рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреИрдЯрд░реНрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрд░реЛрддреЛрдВ рдФрд░ рдЙрдкрднреЛрдХреНрддрд╛рдУрдВ рдХрд╛ рд╕рдореВрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЖрдВрдХрдбрд╝рд╛ рдПрдХ рдЙрдкрднреЛрдХреНрддрд╛ рдФрд░ рдПрдХрд╛рдзрд┐рдХ рд╕реНрд░реЛрддреЛрдВ рд╡рд╛рд▓рд╛ рдорд╛рдорд▓рд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдХрд╛рд░реНрдп рд╡рд┐рддрд░рдг рдкреИрдЯрд░реНрди

рд▓рдЧрднрдЧ рд╣рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡рд┐рд▓рдВрдмрд┐рдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛, рд╕реВрдЪрдирд╛рдПрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдереНрд░реВрдкреБрдЯ рдХреЛ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдХрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рд╡рд╣ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдирд╛ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред

рдЖрдЗрдП 3 рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдХрд╛рд░реНрдп рд╡рд┐рддрд░рдг рдХреЗ рд╕реНрддрд░ рдкрд░ рднреА, рд╡рд┐рддрд░рдг рдХреА рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдФрд░ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреА рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдкреНрд░рд╢реНрди рдЙрдарддрд╛ рд╣реИред рд░рд╛рдЙрдВрдб-рд░реЙрдмрд┐рди рд╡рд┐рддрд░рдг рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛, рдФрд░ рд╣реИрдВрдбрд▓рд░реЛрдВ рдХреЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдПрдВрдЧреЗ рдкреНрд░реАрдлрд╝реЗрдЪ_рд▓рд┐рдорд┐рдЯ. рдХреНрд╖рдгрд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдкреНрд░реАрдлрд╝реЗрдЪ_рд▓рд┐рдорд┐рдЯ рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕рднреА рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рджреЗрдЧрд╛ред

рдореИрд╕реЗрдЬрд┐рдВрдЧ рдХрддрд╛рд░реЛрдВ рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреА рд╣реИред рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдХрд╛рд░реНрдп рдЖрддреЗ рд╣реА рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдХрд╛рд░реНрдп рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд╡рд┐рдлрд▓:

  • messaging:ack(Tack) - рдпрджрд┐ рд╕рдВрджреЗрд╢ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • messaging:nack(Tack) - рд╕рднреА рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдХрд╛рд░реНрдп рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдиреЗ рдкрд░, рд╕рдВрджреЗрд╢ рдЗрд╕реЗ рджреВрд╕рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рднреЗрдЬ рджреЗрдЧрд╛ред

рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ. рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рддреАрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЬрдЯрд┐рд▓ рд╡рд┐рдлрд▓рддрд╛ рд╣реБрдИ: рдкреНрд░реЛрд╕реЗрд╕рд░ 1, рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рдирд┐рдордп рдмрд┐рдВрджреБ рдкрд░ рдХреБрдЫ рднреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рджрд┐рдП рдмрд┐рдирд╛ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреНрд╡рд╛рдЗрдВрдЯ рдПрдХреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдп рдХреЛ рджреВрд╕рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреЗрдЧрд╛ред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╣реИрдВрдбрд▓рд░ 3 рдиреЗ рдХрд╛рд░реНрдп рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рдиреИрдХ рднреЗрдЬ рджрд┐рдпрд╛; рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрд╛рд░реНрдп рдХреЛ рджреВрд╕рд░реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рдХрд┐рдпрд╛ред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдгрд╛рдо

рд╣рдордиреЗ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдирд┐рд░реНрдорд╛рдг рдЦрдВрдбреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдПрд░рд▓рд╛рдВрдЧ/рдПрд▓рд┐рдХреНрд╕рд┐рд░ рдореЗрдВ рдЙрдирдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдмреБрдирд┐рдпрд╛рджреА рд╕рдордЭ рдкреНрд░рд╛рдкреНрдд рдХреА рд╣реИред

рдмреБрдирд┐рдпрд╛рджреА рдкреИрдЯрд░реНрди рдХреЛ рдорд┐рд▓рд╛рдХрд░, рдЖрдк рдЙрднрд░рддреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рдкреНрд░рддрд┐рдорд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдВрддрд┐рдо рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЖрдпреЛрдЬрди, рд░реВрдЯрд┐рдВрдЧ рдФрд░ рд╕рдВрддреБрд▓рди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдореБрджреНрджреЛрдВ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдФрд░ рджреЛрд╖ рд╕рд╣рдирд╢реАрд▓рддрд╛ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрдХреНрд╖ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред

рджреВрд╕рд░реЗ рднрд╛рдЧ рдХрд╛ рдЕрдВрдд.

рдлрд╝реЛрдЯреЛ рдорд╛рд░рд┐рдпрд╕ рдХреНрд░рд┐рд╕реНрдЯреЗрдВрд╕рди
Websequencediagrams.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд┐рддреНрд░ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ