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

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

рд╢реЗрд╡рдЯреА рд▓реЗрдЦ рдЖрдореНрд╣реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдЪреНрдпрд╛ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдкрд╛рдпрд╛рдЪреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗрд▓реЗ. рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдПрд░реНрд▓рд╛рдВрдЧ/рдПрд▓рд┐рдХреНрд╕рд┐рд░ рд╕рд┐рд╕реНрдЯреАрдо рдЖрдгрд┐ рд╕рдВрджреЗрд╢рди рдкрджреНрдзрддреА рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдВрдмрджреНрджрд▓ рдмреЛрд▓рдгреНрдпрд╛рдЪреА рд╣реА рд╡реЗрд│ рдЖрд╣реЗ:

  • рд╡рд┐рдирдВрддреА-рдкреНрд░рддрд┐рд╕рд╛рдж
  • рд╡рд┐рдирдВрддреА-рдЦрдВрдбрд┐рдд рдкреНрд░рддрд┐рд╕рд╛рдж
  • рд╡рд┐рдирдВрддреАрд╕рд╣ рдкреНрд░рддрд┐рд╕рд╛рдж
  • рдкреНрд░рдХрд╛рд╢рд┐рдд-рд╕рджрд╕реНрдпрддреНрд╡ рдШреНрдпрд╛
  • рдЙрд▓рдЯреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд-рд╕рджрд╕реНрдпрддреНрд╡ рдШреНрдпрд╛
  • рдХрд╛рд░реНрдп рд╡рд┐рддрд░рдг

SOA, MSA рдЖрдгрд┐ рд╕рдВрджреЗрд╢рди

SOA, MSA рд╣реА рд╕рд┐рд╕реНрдЯреАрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░реНрд╕ рдЖрд╣реЗрдд рдЬреА рдмрд┐рд▓реНрдбрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рдирд┐рдпрдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛рдд, рддрд░ рдореЗрд╕реЗрдЬрд┐рдВрдЧ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдЖрджрд┐рдо рдкреНрд░рджрд╛рди рдХрд░рддреЗ.

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

рдирд╛рд╡рд╛рдкреНрд░рдорд╛рдгреЗрдЪ рдореЗрд╕реЗрдЬрд┐рдВрдЧ рдореНрд╣рдгрдЬреЗ рдореЗрд╕реЗрдЬ рдмреНрд░реЛрдХрд░. рддреНрдпрд╛рдЪрд╛ рдореБрдЦреНрдп рдЙрджреНрджреЗрд╢ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ рдЖрдгрд┐ рдкрд╛рдард╡рдгреЗ рд╣рд╛ рдЖрд╣реЗ. рдорд╛рд╣рд┐рддреА рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдЗрдВрдЯрд░рдлреЗрд╕, рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рдорд╛рд╣рд┐рддреА рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд▓реЙрдЬрд┐рдХрд▓ рдЪреЕрдиреЗрд▓рдЪреА рдирд┐рд░реНрдорд┐рддреА, рд░рд╛рдЙрдЯрд┐рдВрдЧ рдЖрдгрд┐ рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧ рддрд╕реЗрдЪ рд╕рд┐рд╕реНрдЯрдо рд╕реНрддрд░рд╛рд╡рд░ рдлреЙрд▓реНрдЯ рд╣рд╛рддрд╛рд│рдгреА рдпрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ.
рдЖрдореНрд╣реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдд рдЕрд╕рд▓реЗрд▓реЗ рдореЗрд╕реЗрдЬрд┐рдВрдЧ rabbitmq рд╢реА рд╕реНрдкрд░реНрдзрд╛ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдХрд┐рдВрд╡рд╛ рдмрджрд▓рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдирд╛рд╣реА. рддреНрдпрд╛рдЪреА рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ:

  • рд╡рд┐рддрд░рдг.
    рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреЙрдЗрдВрдЯреНрд╕ рд╕рд░реНрд╡ рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбреНрд╕рд╡рд░ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд, рддреЗ рд╡рд╛рдкрд░рдгрд╛рд▒реНрдпрд╛ рдХреЛрдбрдЪреНрдпрд╛ рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рдЬрд╡рд│.
  • рд╕рд╛рдзреЗрдкрдгрд╛.
    рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХрдореА рдХрд░рдгреНрдпрд╛рд╡рд░ рдЖрдгрд┐ рд╡рд╛рдкрд░рдгреА рд╕реБрд▓рднрддреЗрд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рд╛.
  • рдЪрд╛рдВрдЧрд▓реА рдХрд╛рдордЧрд┐рд░реА.
    рдЖрдореНрд╣реА rabbitmq рдЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдХреЗрд╡рд│ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рдЖрдгрд┐ рдЯреНрд░рд╛рдиреНрд╕рдкреЛрд░реНрдЯ рд▓реЗрдпрд░ рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХрд░рддреЛ, рдЬреЗ рдЖрдореНрд╣реА рд╢рдХреНрдп рддрд┐рддрдХреНрдпрд╛ рд╕реЛрдкреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ OTP рдордзреНрдпреЗ рдмрд╕рддреЛ, рдЦрд░реНрдЪ рдХрдореА рдХрд░рддреЛ.
  • рд▓рд╡рдЪрд┐рдХрддрд╛.
    рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдЕрдиреЗрдХ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдПрдХрддреНрд░ рдХрд░реВ рд╢рдХрддреЗ.
  • рдбрд┐рдЭрд╛рдЗрдирдиреБрд╕рд╛рд░ рд▓рд╡рдЪрд┐рдХрддрд╛.
  • рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА.
    рдореЗрд╕реЗрдЬрд┐рдВрдЧ рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╣ рд╡рд╛рдврддреЗ. рдЬрд╕рдЬрд╕рд╛ рднрд╛рд░ рд╡рд╛рдврддреЛ, рддрд╕рддрд╕реЗ рддреБрдореНрд╣реА рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреЙрдЗрдВрдЯреНрд╕ рд╡реИрдпрдХреНрддрд┐рдХ рдорд╢реАрдирд╡рд░ рд╣рд▓рд╡реВ рд╢рдХрддрд╛.

рдЯрд┐рдкреНрдкрдгреА. рдХреЛрдб рдСрд░реНрдЧрдирд╛рдпрдЭреЗрд╢рдирдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдиреЗ, рдореЗрдЯрд╛-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬрдЯрд┐рд▓ рдПрд░реНрд▓рд╛рдВрдЧ/рдПрд▓рд┐рдХреНрд╕рд┐рд░ рд╕рд┐рд╕реНрдЯрдорд╕рд╛рдареА рдпреЛрдЧреНрдп рдЖрд╣реЗрдд. рд╕рд░реНрд╡ рдкреНрд░рдХрд▓реНрдк рдХреЛрдб рдПрдХрд╛ рднрд╛рдВрдбрд╛рд░рд╛рдд рд╕реНрдерд┐рдд рдЖрд╣реЗ - рдПрдХ рдЫрддреНрд░реА рдкреНрд░рдХрд▓реНрдк. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рд╡реЗрдЧрд│реНрдпрд╛ рдЕрд╕рддрд╛рдд рдЖрдгрд┐ рд╕реЛрдкреНрдпрд╛ рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░рддрд╛рдд рдЬреЗ рд╡реЗрдЧрд│реНрдпрд╛ рдШрдЯрдХрд╛рд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЕрд╕рддрд╛рдд. рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдореБрд│реЗ, рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реАрдЪреЗ API рд░рд╛рдЦрдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ, рдмрджрд▓ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ, рдпреБрдирд┐рдЯ рдЖрдгрд┐ рдПрдХрддреНрд░реАрдХрд░рдг рдЪрд╛рдЪрдгреНрдпрд╛ рд▓рд┐рд╣рд┐рдгреЗ рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ.

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

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

рд╣реЗ рдЦреВрдкрдЪ рдХреНрд▓рд┐рд╖реНрдЯ рджрд┐рд╕рддреЗ, рдкрд░рдВрддреБ рдХреЛрдб рдЗрддрдХреЗ рднрдпрд╛рдирдХ рдирд╛рд╣реА. рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрд╕рд╣ рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЗ рдереЛрдбреНрдпрд╛ рд╡реЗрд│рд╛рдиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕рдЪреНрдпрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдордзреНрдпреЗ рджрд┐рд▓реА рдЬрд╛рддреАрд▓.

рдмрд╛рдЬрд╛рд░

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

рд╕рдВрджреЗрд╢ рд╡рд┐рдирд┐рдордп рдирдореБрдиреЗ (MEPs)

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

рд╡рд┐рдирдВрддреА-рдкреНрд░рддрд┐рд╕рд╛рдж рдХрд┐рдВрд╡рд╛ RPC

рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рджреБрд╕рд░реНтАНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдХрдбреВрди рдкреНрд░рддрд┐рд╕рд╛рдж рдорд┐рд│рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ рддреЗрд╡реНрд╣рд╛ RPC рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрджрд╛рдЪрд┐рдд рдПрдХрд╛рдЪ рдиреЛрдбрд╡рд░ рдЪрд╛рд▓рдд рдЕрд╕реЗрд▓ рдХрд┐рдВрд╡рд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдЦрдВрдбрд╛рд╡рд░ рдЕрд╕реЗрд▓. рдЦрд╛рд▓реА рдореЗрд╕реЗрдЬрд┐рдВрдЧрджреНрд╡рд╛рд░реЗ рдХреНрд▓рд╛рдпрдВрдЯ рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░рдордзреАрд▓ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдЪрд╛ рдПрдХ рдЖрдХреГрддреА рдЖрд╣реЗ.

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

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

  1. рд╡рд┐рдирдВрддреА рд╕рдмрдорд┐рдЯ рдХрд░рд╛

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

    рд╡рд┐рдирд┐рдордп - рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреЙрдЗрдВрдЯрдЪреЗ рдЕрдирдиреНрдп рдирд╛рд╡
    ResponseMatchingTag - рдкреНрд░рддрд┐рд╕рд╛рджрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдерд╛рдирд┐рдХ рд▓реЗрдмрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЕрдиреЗрдХ рд╕рдорд╛рди рд╡рд┐рдирдВрддреНрдпрд╛ рдкрд╛рдард╡рдгреНрдпрд╛рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд.
    рд╡рд┐рдирдВрддреА рд╡реНрдпрд╛рдЦреНрдпрд╛ - рд╡рд┐рдирдВрддреА рд╢рд░реАрд░
    рд╣рдБрдбрд▓рд░рдкреНрд░реЛрд╕реЗрд╕ - рд╣рдБрдбрд▓рд░рдЪрд╛ PID. рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд▓рд╛ рд╕рд░реНрд╡реНрд╣рд░рдХрдбреВрди рдкреНрд░рддрд┐рд╕рд╛рдж рдорд┐рд│реЗрд▓.

  2. рдкреНрд░рддрд┐рд╕рд╛рджрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдд рдЖрд╣реЗ

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

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

рд╕рд░реНрд╡реНрд╣рд░рд╕рд╛рдареА, рдкреНрд░рдХреНрд░рд┐рдпреЗрдордзреНрдпреЗ 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 MB рдЪреЗ 1 рд╕рдВрджреЗрд╢ 1 GB рдЪреНрдпрд╛ рдПрдХрд╛ рд╕рдВрджреЗрд╢рд╛рдкреЗрдХреНрд╖рд╛ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗрдд.

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

рд╡рд┐рдирдВрддреАрд╕рд╣ рдкреНрд░рддрд┐рд╕рд╛рдж

рдбрд╛рдпрд▓реЙрдЧ рд╕рд┐рд╕реНрдЯреАрдо рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА 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).

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

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

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

рдкрдм-рд╕рдмрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реВрди, рддреБрдореНрд╣реА рд▓реЙрдЧрд┐рдВрдЧрд╕рд╛рдареА рд╕реЛрдпреАрд╕реНрдХрд░ рдирдореБрдирд╛ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛. рд╕реНрддреНрд░реЛрдд рдЖрдгрд┐ рдЧреНрд░рд╛рд╣рдХрд╛рдВрдЪрд╛ рд╕рдВрдЪ рдкреВрд░реНрдгрдкрдгреЗ рднрд┐рдиреНрди рдЕрд╕реВ рд╢рдХрддреЛ. рдЖрдХреГрддреА рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдЖрдгрд┐ рдЕрдиреЗрдХ рд╕реНрддреНрд░реЛрддрд╛рдВрд╕рд╣ рдХреЗрд╕ рджрд░реНрд╢рд╡рддреЗ.

рдХрд╛рд░реНрдп рд╡рд┐рддрд░рдг рдирдореБрдирд╛

рдЬрд╡рд│рдЬрд╡рд│ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд▓реНрдкрд╛рдордзреНрдпреЗ рдЕрд╣рд╡рд╛рд▓ рддрдпрд╛рд░ рдХрд░рдгреЗ, рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреНрд░рдгрд╛рд▓реАрдВрдХрдбреВрди рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ рдпрд╛рд╕рд╛рд░рдЦреА рд╕реНрдердЧрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рд░реНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕рддрд╛рдд. рд╣реА рдХрд╛рд░реНрдпреЗ рдХрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдгрд╛рд▓реАрдЪреЗ рдереНрд░реБрдкреБрдЯ рд╣рдБрдбрд▓рд░реНрд╕ рдЬреЛрдбреВрди рд╕рд╣рдЬрдкрдгреЗ рдореЛрдЬрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рдлрдХреНрдд рдкреНрд░реЛрд╕реЗрд╕рд░рдЪреЗ рдХреНрд▓рд╕реНрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдордзреНрдпреЗ рд╕рдорд╛рди рд░реАрддреАрдиреЗ рдХрд╛рд░реНрдпреЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ.

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

рдореЗрд╕реЗрдЬрд┐рдВрдЧ рд░рд╛рдВрдЧ рдЖрдгрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдзрд╛рдиреНрдп рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ. рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд▓реНрдпрд╛рд╡рд░ рдХрд╛рд░реНрдпреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛рдд. рдХрд╛рд░реНрдп рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рдкреВрд░реНрдг рдХрд┐рдВрд╡рд╛ рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрдК рд╢рдХрддреЗ:

  • messaging:ack(Tack) - рд╕рдВрджреЗрд╢рд╛рд╡рд░ рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА рдЕрд╕рд▓реНрдпрд╛рд╕ рдХреЙрд▓ рдХрд░рд╛
  • messaging:nack(Tack) - рд╕рд░реНрд╡ рдЖрдкрддреНрдХрд╛рд▓реАрди рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдХреЙрд▓ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдПрдХрджрд╛ рдХрд╛рд░реНрдп рдкрд░рдд рдХреЗрд▓реЗ рдХреА, рд╕рдВрджреЗрд╢рд╡рд╣рди рддреЗ рджреБрд╕рд░реНтАНрдпрд╛ рд╣рдБрдбрд▓рд░рдХрдбреЗ рдкрд╛рдард╡реЗрд▓.

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

рд╕рдордЬрд╛ рддреАрди рдХрд╛рд░реНрдпрд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛рдирд╛ рдПрдХ рдЬрдЯрд┐рд▓ рдмрд┐рдШрд╛рдб рдЭрд╛рд▓рд╛: рдкреНрд░реЛрд╕реЗрд╕рд░ 1, рдХрд╛рд░реНрдп рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдПрдХреНрд╕рдЪреЗрдВрдЬ рдкреЙрдИрдВрдЯрд▓рд╛ рдХрд╛рд╣реАрд╣реА рдХрд│рд╡рдгреНрдпрд╛рд╕ рд╡реЗрд│ рди рджреЗрддрд╛ рдХреНрд░реЕрд╢ рдЭрд╛рд▓рд╛. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдПрдХреНрд╕реНрдЪреЗрдВрдЬ рдкреЙрдЗрдВрдЯ ack рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛рд▓рдмрд╛рд╣реНрдп рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рдХрд╛рд░реНрдп рджреБрд╕рд░реНрдпрд╛ рд╣рдБрдбрд▓рд░рдХрдбреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░реЗрд▓. рдХрд╛рд╣реА рдХрд╛рд░рдгрд╛рд╕реНрддрд╡, рд╣рдБрдбрд▓рд░ 3 рдиреЗ рдХрд╛рд░реНрдп рд╕реЛрдбрд▓реЗ рдЖрдгрд┐ рдиреЕрдХ рдкрд╛рдард╡рд▓реЗ; рдкрд░рд┐рдгрд╛рдореА, рдХрд╛рд░реНрдп рджреБрд╕рд░реНрдпрд╛ рд╣рдБрдбрд▓рд░рдХрдбреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЬреНрдпрд╛рдиреЗ рддреЗ рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рдкреВрд░реНрдг рдХреЗрд▓реЗ.

рдкреНрд░рд╛рдердорд┐рдХ рд╕рд╛рд░рд╛рдВрд╢

рдЖрдореНрд╣реА рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реАрдВрдЪреЗ рдореВрд▓рднреВрдд рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдХрд╡реНрд╣рд░ рдХреЗрд▓реЗ рдЖрд╣реЗрдд рдЖрдгрд┐ Erlang/Elixir рдордзреАрд▓ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдЪреА рдореВрд▓рднреВрдд рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡рд▓реА рдЖрд╣реЗ.

рдореВрд▓рднреВрдд рдирдореБрдиреЗ рдПрдХрддреНрд░ рдХрд░реВрди, рдЖрдкрдг рдЙрджрдпреЛрдиреНрдореБрдЦ рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬрдЯрд┐рд▓ рдкреНрд░рддрд┐рдорд╛рди рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛.

рдорд╛рд▓рд┐рдХреЗрдЪреНрдпрд╛ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рднрд╛рдЧрд╛рдд, рдЖрдореНрд╣реА рд╕реЗрд╡рд╛рдВрдЪреЗ рдЖрдпреЛрдЬрди, рд░рд╛рдЙрдЯрд┐рдВрдЧ рдЖрдгрд┐ рдмреЕрд▓рдиреНрд╕рд┐рдВрдЧрдЪреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдВрдмрджреНрджрд▓ рдкрд╛рд╣реВ рдЖрдгрд┐ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдЖрдгрд┐ рд╕рд┐рд╕реНрдЯрдордЪреНрдпрд╛ рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░рдиреНрд╕рдЪреНрдпрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдмрд╛рдЬреВрдмрджреНрджрд▓ рджреЗрдЦреАрд▓ рдмреЛрд▓реВ.

рджреБрд╕рд▒реНрдпрд╛ рднрд╛рдЧрд╛рдЪрд╛ рд╢реЗрд╡рдЯ.

рдлреЛрдЯреЛ рдорд╛рд░рд┐рдпрд╕ рдХреНрд░рд┐рд╕реНрдЯреЗрдирд╕реЗрди
websequencediagrams.com рд╡рд╛рдкрд░реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реА рдЪрд┐рддреНрд░реЗ

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛