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

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

рд╡рд┐рдЧрддрдорд╛ рд▓реЗрдЦ рд╣рд╛рдореАрд▓реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛рдХреЛ рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рдЖрдзрд╛рд░рд╣рд░реВ рдЬрд╛рдБрдЪреНрдпреМрдВред рдпреЛ рдбрд╛рдЯрд╛ рдкреНрд░рд╡рд╛рд╣, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ Erlang/Elixir рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдорд╛ рд╕рдиреНрджреЗрд╢ рдврд╛рдБрдЪрд╛рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛рд╣рд░реВ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрдиреЗ рд╕рдордп рд╣реЛ:

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

SOA, MSA рд░ рд╕рдиреНрджреЗрд╢

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

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

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

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

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

рдкреНрд░рдгрд╛рд▓реА рдШрдЯрдХрд╣рд░реВ рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛ рджрд▓рд╛рд▓ рдорд╛рд░реНрдлрдд рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрдЫрдиреНред рд╕рдиреНрджреЗрд╢ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдпрдмрд╛рдЯ, рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛рдорд╛ рдзреЗрд░реИ рдЬреАрд╡рди рдЪрд░рдгрд╣рд░реВ рдЫрдиреН:

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

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

рдЖрджрд╛рдирдкреНрд░рджрд╛рди

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

рд╕рдиреНрджреЗрд╢ рдЖрджрд╛рдирдкреНрд░рджрд╛рди рдврд╛рдБрдЪрд╛ (MEPs)

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

рдЕрдиреБрд░реЛрдз-рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛ RPC

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

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

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

  1. рдЕрдиреБрд░реЛрдз рдкреЗрд╢ рдЧрд░реНрдиреБрд╣реЛрд╕реН

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

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

  2. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрджреИ

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

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

рд╕рд░реНрднрд░рдХреЛ рд▓рд╛рдЧрд┐, рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓реЗ реи рдЪрд░рдгрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:

  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 рдХреЛ рдПрдХрд▓ рд╕рдиреНрджреЗрд╢ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рдЫрдиреНред

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

рд╡рд┐рдирд┐рдордп - рд╡рд┐рдирд┐рдордп рдмрд┐рдиреНрджреБ рдХреЛ рдирд╛рдо,
рдкреНрд░рдореБрдЦ - рд░рд╛рдЙрдЯрд┐рдЩ рдХреБрдЮреНрдЬреА
рд╕рдиреНрджреЗрд╢ - рдкреЗрд▓реЛрдб

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

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

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

рдХрд╛рд░реНрдп рд╡рд┐рддрд░рдг рдврд╛рдБрдЪрд╛

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

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

рд╕рдиреНрджреЗрд╢рд▓реЗ рд▓рд╛рдорд╣рд░реВ рд░ рдкреНрд░рд╢реЛрдзрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рд╣рд░реВ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрджрдЫред рдкреНрд░реЛрд╕реЗрд╕рд░рд╣рд░реВ рдЖрдЗрдкреБрдЧреНрджрд╛ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫрдиреНред рдХрд╛рд░реНрдп рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╡рд╛ рдЕрд╕рдлрд▓ рд╣реБрди рд╕рдХреНрдЫ:

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

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

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

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

рд╣рд╛рдореАрд▓реЗ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдХреЛ рдЖрдзрд╛рд░рднреВрдд рдирд┐рд░реНрдорд╛рдг рдмреНрд▓рдХрд╣рд░реВ рдХрднрд░ рдЧрд░реЗрдХрд╛ рдЫреМрдВ рд░ Erlang/Elixir рдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдкреНрд░рдпреЛрдЧрдХреЛ рдЖрдзрд╛рд░рднреВрдд рдмреБрдЭрд╛рдЗ рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдХрд╛ рдЫреМрдВред

рдЖрдзрд╛рд░рднреВрдд рдврд╛рдБрдЪрд╛рд╣рд░реВ рд╕рдВрдпреЛрдЬрди рдЧрд░реЗрд░, рддрдкрд╛рдИрдВ рдЙрджреАрдпрдорд╛рди рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдЬрдЯрд┐рд▓ рдкреНрд░рддрд┐рдорд╛рдирд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

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

рджреЛрд╕реНрд░реЛ рднрд╛рдЧрдХреЛ рдЕрдиреНрддреНрдпред

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди