рдордирдорд╛рдиреА рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдкрд░ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░реЗрдВ

рднрд╛рдЧ 2: рд╕рдорд╛рдзрд╛рди


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


рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдПрдБ рд╕рдВрдХрд▓реНрдкрдирд╛


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

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

рдЖрдЗрдП рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕реЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

public interface Publisher<T> { public void subscribe(Subscriber<? super T> s); } public interface Subscriber<T> { public void onSubscribe(Subscription s); public void onNext(T t); public void onError(Throwable t); public void onComplete(); } public interface Subscription { public void request(long n); public void cancel(); } public interface Processor<T, R> extends Subscriber<T>, Publisher<R> { } 

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

  1. onSubscribeред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЛ рдкреНрд░рдХрд╛рд╢рдХ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рд╡рд╕реНрддреБ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдкреНрд░рдХрд╛рд╢рдХ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕ рд╕рдмрд╕реНрдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рдХрд╛рд╢рдХ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рдХрд╛рд╢рдХ рдЕрдЧрд▓реЗ рддрддреНрд╡ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП, рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЛ рдСрди рд▓рд╛рдЗрди рд╡рд┐рдзрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  3. рдЗрд╕рдХреЗ рдмрд╛рдж рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рд╕рдордп-рд╕рдордп рдкрд░ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдкрд░ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрдмреНрд▓рд┐рд╢рд░ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдореЗрдердб рдХреЗ рдЬрд░рд┐рдП рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдЯреЛрдЯрд▓ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
  4. рдпрджрд┐ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдкрд░рд┐рдорд┐рдд рд╣реИ, рддреЛ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ onNext рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рдХрд╛рд╢рдХ рдХреЛ onComplete рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
  5. рдпрджрд┐ рдкреНрд░рдХрд╛рд╢рдХ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд╣реИ рдФрд░ рддрддреНрд╡реЛрдВ рдХреА рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдСрдирд░рд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
  6. рдСрдирдХреНрд░реАрдо рдпрд╛ рдСрдирд░реЙрдЗрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд╢рдХ рдХреА рдЖрдЧреЗ рдХреА рдмрд╛рддрдЪреАрдд рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

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

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рдмрдлрд░ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдСрдирдиреЗрдХреНрд╕реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ Iterator рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ hasNext рдФрд░ рдЕрдЧрд▓реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрдлрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рдПрдХ рдЕрд╡рд░реБрджреНрдз рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХреНрдбрдмреНрд▓реЙрдХрдбреАрдХреНрдпреВред

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

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

рдЪрд┐рддреНрд░рд╛ 7. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрд╛рддрдЪреАрдд

рдмреЗрд╢рдХ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХреЙрд▓ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗред рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рддрд┐рдорд╛рдиреЛрдВ рдХреЗ рдПрдХ рдмреЗрдореЗрд▓ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрд╛рддрдЪреАрдд, рдФрд░ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ hasNext рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп trueN рдпрд╛ false рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрд╛рддрдЪреАрдд рдХреЗ рд╡рд┐рдкрд░реАрдд, рддрд╛рд▓реЗ рдХреЗ рдХрд╛рд░рдг рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдХреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЗ рд╕рдордЧреНрд░ рднрд╛рд░ рдХреЛ рдмрдврд╝рд╛рдХрд░ рдХрд╛рдлреА рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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

рдЕрдХреНрдХрд╛-рдзрд╛рд░рд╛рдПрдБ рдФрд░ рдПрдХреНрдХрд╛-http рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд░реВрдк рдореЗрдВ


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

рдЕрдХреНрдХрд╛ рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╛рд╣рд┐рддреНрдп рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣рд╛рдВ рдирд╣реАрдВ рд░реБрдХрддреЗ рд╣реИрдВ ( рдЕрдХреНрдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╕реНрд░реЛрдд рд╣реИ, рдореИрдВ рдПрдХреНрд╢рди рдореЗрдВ рднреА рдЕрдХреНрдХрд╛ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ)ред рдпрд╣рд╛рдВ рд╣рдо JVM рдХреЗ рддрд╣рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рддрдХрдиреАрдХреА рдкрдХреНрд╖ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗред

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

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

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

рдПрдХреНрдХрд╛-рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдпреЛрдЬрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рддрддреНрд╡ рд╕реНрд░реЛрдд, рдкреНрд░рд╡рд╛рд╣ рдФрд░ рд╕рд┐рдВрдХ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдХрд░, рд╣рдореЗрдВ рдПрдХ рд░рдирдиреЗрдмрд▓ рдЧреНрд░рд╛рдлрд╝ рдорд┐рд▓рддрд╛ рд╣реИред рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдордЯреАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧреНрд░рд╛рдл рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ (рднреМрддрд┐рдХрд╡рд╛рджреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ActorMaterializer) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред

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

 val featuresSource: Source[Array[Float], NotUsed] = Source.fromIterator { () => featuresIterator } 

рдореМрдЬреВрджрд╛ рд╕реНрд░реЛрдд рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рднреА рд╕реНрд░реЛрдд рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 val newSource: Source[String, NotUsed] = source.map(item => transform(item)) 

рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдПрдХ nontrivial рдСрдкрд░реЗрд╢рди рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рдкреНрд░рд╡рд╛рд╣ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдХреНрдХрд╛-рдзрд╛рд░рд╛ рдкреНрд░рд╡рд╛рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрдирд╛рдирд╛ рд╣реИ:

 val someFlow: Flow[String, Int, NotUsed] = Flow.fromFunction((x: String) => x.length) 

рд╕реЛрд░реНрд╕ рдПрдВрдб рдлреНрд▓реЛ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рд╕реЛрд░реНрд╕ рдорд┐рд▓рддрд╛ рд╣реИред

 val newSource: Source[Int, NotUsed] = oldSource.via(someFlow) 

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

 val printSink: Sink[Any, Future[Done]] = Sink.foreach(println) 

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

рдЖрд╡рд╢реНрдпрдХ рд╕реНрд░реЛрдд, рдкреНрд░рд╡рд╛рд╣, рдФрд░ рд╕рд┐рдВрдХ рдХреЛ рдорд┐рд▓рд╛рдХрд░, рд╣рдореЗрдВ RunnableGraph рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкрд░рд┐рдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдЧреНрд░рд╛рдл рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЪрд░рдгреЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдЪрд░рдгреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкреВрд░реЗ рдЧреНрд░рд╛рдл рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕реНрд░реЛрдд рдЪрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 val graph: RunnableGraph[NotUsed] = someSource.to(Sink.foreach(println)) 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рд╕рд┐рдВрдХ рдЪрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:

 val graph: RunnableGraph[Future[Done]] = someSource.toMat(Sink.foreach(println))(Keep.right) 

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

 //   ActorSystem,       implicit val system = ActorSystem(тАЬsystem nameтАЭ) // ,       ActorSystem implicit val materializer = ActorMaterializer() //    ,       Sink val graph: RunnableGraph[Future[immutable.Seq[Int]]] = Source.fromIterator(() => (1 to 10).iterator).toMat(Sink.seq)(Keep.right) //   ,    implicit scope. val result: Future[immutable.Seq[Int]] = graph.run() 

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

 val source: Source[Score, NotUsed] = Source.fromIterator(() => sourceIterator).map(item => transform(item)) val publisher: Publisher[Score] = source.runWith(Sink.asPublisher(false)) 

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

Akka рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ akka -http рдореЙрдбреНрдпреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ HTTP рдкрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд╕рдВрдЪрд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдПрдХреНрдХрд╛ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдлреНрд▓реЛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдЧреНрд░рд╛рдл рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ HTTP рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХреНрдХрд╛-http рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

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

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

 val httpFlow: Flow[(HttpRequest,Id), (Try[HttpResponse],Id), Http.HostConnectionPool] = Http().cachedHostConnectionPool[Id](hostAddress, portNumber) 

рдЬрдм Http ()ред CachedHostConnectionPool [T] (hostAddress, portNumber) рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ ActorSystem рдореЗрдВ, рдЬреЛ рдХрд┐ рдПрдХ рдирд┐рд╣рд┐рдд рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ, рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡рдпрдВ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдлрд╝реНрд▓реЛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдФрд░ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдЖрдИрдбреА рдкрд╣рдЪрд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХреЛ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рдЪрд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ HTTP рдХреЙрд▓ inkka-http рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рд╣реИ, рдФрд░ рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВ, рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛред рдЗрд╕рд▓рд┐рдП, рдЖрдЙрдЯрдкреБрдЯ рдлреНрд▓реЛ рдореЗрдВ рдХреНрд╡реЗрд░реА рдХреЗ рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдкрд╣рдЪрд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреБрдЫ рдЬреЛрдбрд╝реЗ рджреЗрддрд╛ рд╣реИред

рд╕реАрдзреЗ рддреМрд░ рдкрд░, HTTP рдХрдиреЗрдХреНрд╢рди рддрдм рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдЧреНрд░рд╛рдлрд╝ (рдЗрд╕ рдкреНрд░рд╡рд╛рд╣ рд╕рд╣рд┐рдд) рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рднреМрддрд┐рдХреАрдХреГрдд)ред рдЕрдХреНрдХрд╛-http рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЪрд╛рд╣реЗ рдХрд┐рддрдиреА рднреА рдмрд╛рд░ httpFlow рд╡рд╛рд▓реЗ рдЧреНрд░рд╛рдлрд╝ рдХреЛ рднреМрддрд┐рдХ рд░реВрдк рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рдПрдХ рдПрдХреНрдЯрд░рд╕рд┐рд╕реНрдЯрдо рдХреЗ рднреАрддрд░ рд╣рдореЗрд╢рд╛ HTTP рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд▓ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рднреА рднреМрддрд┐рдХрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рднрд╛рд░ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, HTTP рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХрд╛ рдЬреАрд╡рди рдЪрдХреНрд░ ActorSystem рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдереНрд░реЗрдб рдкреВрд▓ рдХрд╛ рдЬреАрд╡рди рдЪрдХреНрд░ рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ (рдпрд╛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪрд░рдг akka-streams рдФрд░ akka-http) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдзрд┐рдХрддрдо рджрдХреНрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрд╕реА JVM рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░ ActorSystem рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛: рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг


рддреЛ, рдЕрдм рд╣рдо рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрд╛рддрдЪреАрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдкрд░ рд╡рд┐рддрд░рд┐рдд рдбреЗрдЯрд╛ рдХреЗ рдмрдбрд╝реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдкрд╣рд▓реЗ рд╣реА рдЪрд┐рддреНрд░ 7 рдореЗрдВ рджрд┐рдЦрд╛рдИ рдЬрд╛ рдЪреБрдХреА рд╣реИред

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

 case class Features(id: String, vector: Array[Float]) case class Score(id: String, score: Float) //(1) val batchesRequestCount = config.getInt(тАЬscoreService. batchesRequestCountтАЭ)//(2) //... val scoreDs: Dataset[Score] = featuresDs.mapPartitions { fi: Iterator[Features] => val publisher: Publisher[Iterable[Score]] = createPublisher(fi) //(3) val iteratorSubscriber: Iterator[Score] = new IteratorSubscriber(batchesRequestCount) //(4) publisher.subscribe(batchesRequestCount) //(5) iteratorSubscriber //(6) } 

рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗрд╡рд╛ рдПрдХ рдмрд╛рд░ рдлреАрдЪрд░ рд╡реИрдХреНрдЯрд░ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдПрдХ рдХреЙрд▓ рдХреЗ рдмрд╛рдж рд╡рд░реНрдЧреАрдХрд░рдг рдкрд░рд┐рдгрд╛рдо рднреА рдкреВрд░реЗ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдкреНрд░рдХрд╛рд╢рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рд╕реНрдХреЛрд░ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди Iterable [рд╕реНрдХреЛрд░]ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдЗрд╕ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рдЗрдЯреНрд░реЗрдЯрд░ (рдЬреЛ рдХрд┐ рдПрдХ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рднреА рд╣реИ) рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧреАрдХрд░рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдСрди рдХреЙрд▓ рд╡рд┐рдзрд┐ рд╕реЗ рд╕рд┐рдВрдЧрд▓ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬрддреЗ рд╣реИрдВред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП onNext рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред рдЕрдм рд╣рдо рдЗрд╕ рдХреЛрдб рдХрд╛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

  1. рд╣рдо рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЖрдИрдбреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рди рдХреЗ рд╕рд╛рде рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
  2. рд╣рдо рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рдХ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпреЗ рдорд╛рди рдмрдлрд░ рдореЗрдВ рдЭреВрда рд╣реЛрдВрдЧреЗ рдФрд░ рдЬрдм рддрдХ рд╡реЗ рдкрд░рд┐рдгрд╛рдореА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдорд╛рди рдирд┐рд╖реНрдкрд╛рджрдХ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдореГрддрд┐ рдХреА рдорд╛рддреНрд░рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
  3. рд╕реНрд░реЛрдд рдЗрдЯреНрд░реЗрдЯрд░ рд╕реЗ рдкреНрд░рдХрд╛рд╢рдХ рдмрдирд╛рдПрдБред рд╡рд╣ рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред CreatePublisher рдлрд╝рдВрдХреНрд╢рди рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред
  4. рдПрдХ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЗрдЯреНрд░реЗрдЯрд░ рд╣реЛрдЧрд╛ред IteratorSubscriber рд╡рд░реНрдЧ рдХреЛрдб рднреА рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  5. рдкреНрд░рдХрд╛рд╢рдХ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХрд░рдг рдХрд░рдирд╛ред
  6. рдореИрдкрдкрд╛рд░реНрдЯрд┐рд╢рди рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ IteratorSubscriber рд▓реМрдЯреЗрдВред

рдЕрдм createPublisher рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

 type Ids = Seq[String] //(1) val batchSize = config.getInt("scoreService.batchSize") val parallelismLevel = config.getInt("scoreService.parallelismLevel") //(2) //... def createPublisher(fi: Iterator[Features]): Publisher[Iterable[Score]] = { import ActorSystemHolder._ //(3) Source .fromIterator(() => fi) //(4) .grouped(batchSize) //(5) .map { groupedFeatures: Seq[Features] => val request: (HttpRequest, Ids) = createHttpRequest(groupedFeatures) //(6) logger.debug(s"Sending request for the first id: ${request._2(0)}") request } .via(httpFlow) //(7) .flatMapMerge(parallelismLevel, { //(8) case (Success(response), ids) if response.status.isSuccess() => logger.debug(s"Processing successful result for the first id: ${ids(0)}") val resultSource: Source[Iterable[Score], _] = response.entity.dataBytes.reduce(_ ++ _).map { responseBytes => processSuccessfulResponse(responseBytes, ids) } //(9) resultScore case (Success(response), ids) => logger.warn( s"Failed result for the first id: ${ids(0)}, HTTP status: ${response.status}" ) response.discardEntityBytes() Source.failed( new IOException(s"Non-successful HTTP status: ${response.status}") ) //(10) case (Failure(ex), ids) => logger.warn(s"Failed result: an exception has occured", ex) Source.failed(ex) //(11) }) .runWith(Sink.asPublisher(false)) //(12) } def createHttpRequest(featuresSeq: Seq[Features]): (HttpRequest, ProfileIds) = { val requestBytes: Array[Byte] = featuresToMatrixBytes(featuresSeq) val ids: ProfileIds = extractIds(featuresSeq) val httpRequest = HttpRequest( method = HttpMethods.PUT, uri = "/score", entity = requestBytes ) httpRequest -> ids } 

  1. - , . httpFlow, .
  2. : , (batchSize) (parallelismLevel).
  3. implicit scope ActorSystem, ActorMaterializer httpFlow. Spark-. ActorSystemHolder .
  4. akka-streams . Source[Features] .
  5. batchSize .
  6. HttpRequest . HttpRequest createHttpRequest. createPublisher. feature-, , ( predict). , HTTP-. , HTTP-, HTTP-, URI .
  7. httpFlow.
  8. , . flatMapMerge, akka-http Source[ByteString], , . . parallelismLevel , ( ). HTTP-: , , , .
  9. : . akka ByteString. , ByteString O(1), ByteString . , , . , .
  10. HTTP- , Stream . , discardEntityBytes , , .
  11. . akka-http , .
  12. , Publisher, . , . false Sink.asPublisher , Publisher Subscriber-.

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рдЦрдВрдб рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдХреНрдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдПрдХреНрдЯрд░рд╕рд┐рд╕реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рдмрд╛рд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлрд┐рд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрдкрд╛рд░реНрдХ рдирд┐рд╖реНрдкрд╛рджрдХ рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╕реНрдкрд╛рд░реНрдХ рдирд┐рд╖реНрдкрд╛рджрдХ рдПрдХ рдЕрд▓рдЧ JVM рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рднреАрддрд░, рд╣рдо рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо ActorSystem рдФрд░ ActorMatrializer рдФрд░ httpFlow рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред

 object ActorSystemHolder { implicit lazy val actorSystem: ActorSystem = { //(1) val actorSystemName = s"score-service-client" logger.debug(s"Creating actor system $actorSystemName") val as = ActorSystem(actorSystemName) //(2) logger.debug("Adding shutdown hook for the actor system") scala.sys.addShutdownHook { //(3) logger.debug(s"Terminating actor system $actorSystemName") Await.result(as.terminate(), 30.seconds) //to Mars :) logger.debug(s"The actor system $actorSystemName has been terminated") } as } implicit lazy val materializer: ActorMaterializer = { //(4) logger.debug(s"Creating actor materializer for actor system ${actorSystem.name}") ActorMaterializer() } lazy val httpFlow: Flow[ (HttpRequest,ProfileIds), (Try[HttpResponse], ProfileIds), Http.HostConnectionPool] = { //(5) val httpFlowSettings = ConnectionPoolSettings(actorSystem) logger.debug(s"Creating http flow with settings $httpFlowSettings") Http().cachedHostConnectionPool[ProfileIds]( config.getString("scoreService.host"), config.getInt("scoreService.int"), settings = httpFlowSettings ) } } 

  1. рд╣рдо рдЖрд▓рд╕реА рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рд╡реИрд╢реНрд╡рд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓реНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рддрдм рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ рдЬрдм рд╡реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдорд╛рдБрдЧ рдореЗрдВ рд╣реЛрдВрдЧреЗред
  2. рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ ActorSystem рдмрдирд╛рддрд╛ рд╣реИред
  3. рдПрдХреНрдЯрд░рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╕рднреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрд╕ рдкрд░ рд╕рдорд╛рдкреНрддрд┐ рдХреА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рд╕рднреА рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдорд╛рдирдХ рд╕реНрдЯреЙрдк рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рджреЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрд╕ рд╣реБрдХ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ JVM рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
  4. рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ ActorMaterializer рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ ActorSystem рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрдХрд╛-рд╕реНрдЯреНрд░реАрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред
  5. рдЕрдВрдд рдореЗрдВ, рд╣рдо рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП httpFlow рдмрдирд╛рддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣рд╛рдБ рд╣рдо ActorSystem рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ HTTP рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЗ рдкреВрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк HTTP рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╣рдорд╛рд░реА HTTP рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

 sealed trait QueueItem[+T] case class Item[+T](item: T) extends QueueItem[T] case object Done extends QueueItem[Nothing] case class Failure(cause: Throwable) extends QueueItem[Nothing] //(1) class StreamErrorCompletionException(cause: Throwable) extends Exception(cause) //(2) class IteratorSubscriber[T](requestSize: Int) extends Subscriber[Iterable[T]] with Iterator[T] { //(3) private val buffer: BlockingQueue[QueueItem[Iterable[T]]] = new LinkedBlockingQueue[QueueItem[Iterable[T]]]() //(4) private var expecting: Int = 0 //(5) private val subscriptionPromise: Promise[Subscription] = Promise() private lazy val subscription: Subscription = Await.result(subscriptionPromise.future, 5.minutes) //(6) private var currentIterator: Iterator[T] = Iterator.empty //(7) private var isDone = false //(8) override def onSubscribe(s: Subscription): Unit = { subscriptionPromise.success(s) //(9) logger.trace("The iterator has been subscribed") } override def onNext(t: Iterable[T]): Unit = { logger.trace("Putting a next batch to the buffer") buffer.put(Item(t)) //(10) } override def onComplete(): Unit = { logger.debug("The stream has been succesfully completed") buffer.put(Done) //(11) } override def onError(t: Throwable): Unit = { logger.warn("The stream has been completed with error", t) buffer.put(Failure(t)) //(12) } override def hasNext: Boolean = { logger.trace("Asking hasNext") if (currentIterator.hasNext) { //(13) true } else if (isDone) { //(14) false } else { if (expecting < requestSize) { requestNextBatches() //(15) } buffer.take() match { //(16) case Item(batch) => currentIterator = batch.iterator expecting -= 1 this.hasNext //(17) case Done => isDone = true false //(18) case Failure(exception) => throw new StreamErrorCompletionException(exception) //(19) } } } override def next(): T = { val out = currentIterator.next() logger.trace("The next element is {}", out) out //(20) } private def requestNextBatches(): Unit = { logger.debug(s"Requesting {} batches", requestSize) subscription.request(requestSize) expecting += requestSize //(21) } } 

IteratorSubscriber рд╡рд░реНрдЧ рдирд┐рд░реНрдорд╛рддрд╛-рдЙрдкрднреЛрдХреНрддрд╛ рдореЙрдбрд▓ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд┐рд░реНрдорд╛рддрд╛ рд╣реИ, рдФрд░ рдЬреЛ рднрд╛рдЧ Iterator рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЙрдкрднреЛрдХреНрддрд╛ рд╣реИред рдЕрд╡рд░реБрджреНрдз рдХрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдЪрд╛рд░ рдХреЗ рд╕рд╛рдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред Iterator рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ Apache Spark рдирд┐рд╖реНрдкрд╛рджрдХ рдкреВрд▓ рд╕реЗ рдПрдХ рдзрд╛рд░рд╛ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддрд░реАрдХреЗ ActorSystem рдХреЗ рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╡рд╛рд▓реЗ рдкреВрд▓ рд╕реЗ рдмреБрд▓рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЕрдм, рдЖрдЗрдП рджрд┐рдП рдЧрдП IteratorSubscriber рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВред

  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдмрдлрд░ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреАрдЬреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмрдлрд░ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рдореВрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдбреЛрди рдХреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдереНрд░реЛрдмреЗрдмрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирд╛ред
  2. , hasNext .
  3. , , Publisher-.
  4. , . LinkedBlockingQueue, . , .
  5. , . , , Publisher-. , , Publisher- . hasNext next ( requestNextBatches hasNext), , .
  6. subscriptionPromise subscription Subscription, Publisher onSubscribe. , Reactive Streams Subscriber- Publisher- , , hasNext , onSubscribe. , subscription, Publisher-. lazy subscription, Promise.
  7. . hasNext next, , .
  8. , , hasNext false . hasNext, .
  9. onSubscribe Publisher- Subscription Promise, subscription.
  10. onNext Publisher-, . .
  11. Publisher onComplete, Done.
  12. Publisher onError. .
  13. hasNext , . , true, . , .
  14. , false.
  15. , , requestSize, Publisher. , , , Publisher- , HTTP- .
  16. . , , , . , , ( , , subscription), , , , .
  17. , currentIterator. , . , hasNext , ( , ), .
  18. , false hasNext. , isDone, , . - , hasNext , false. , hasNext , false , . , .
  19. , , , .
  20. рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рд╡рд░реНрддрдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдЕрдЧрд▓рд╛ рддрддреНрд╡ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХреЙрд▓ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ hasNext рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдЕрдЧрд▓рд╛ рддрддреНрд╡ рд╣рдореЗрд╢рд╛ рдЕрдЧрд▓рд╛ рддрддреНрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  21. рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░рдХрд╛рд╢рдХ рдХреЛ рдПрдХ рд╕рдВрдХреЗрдд рднреЗрдЬрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдкреНрд░рдХрд╛рд╢рдХ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рд╕рджрд╕реНрдпрддрд╛ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдЧрд▓реЗ рд╕рдореВрд╣ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рд╕рдореВрд╣реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рдореВрд▓реНрдп рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИред рд╣рдо рдЗрд╕ рдорд╛рди рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднреА рдмрдврд╝рд╛рддреЗ рд╣реИрдВред

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

рдЪрд┐рддреНрд░рд╛ 8. рд╕реНрд░реЛрдд рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреА рд╕рд╣рднрд╛рдЧрд┐рддрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ: рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рдлрд╛рдпрджреЗ рдФрд░ рдиреБрдХрд╕рд╛рди


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

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдпреЛрдЬрдирд╛ рдЯреНрдпреВрдирд┐рдВрдЧ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреВрдБрдХрд┐ akka-http рдЕрдкрдиреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдПрдХ рд╣реА рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╛рд╣рд░реА рд╕реЗрд╡рд╛ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╛ рдпрджрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдХрдИ рдбреЗрдЯрд╛ рдХреЗрдВрджреНрд░реЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░ рдореЗрдВ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ Apache Spark рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╡реЗ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдбреЗрдЯрд╛ рдХреЗрдВрджреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреЙрд▓ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдВред

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

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

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

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

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

Source: https://habr.com/ru/post/hi413141/


All Articles