рдорд╛рдЗрдХреЛрдиреЙрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдкрд░рд┐рдЪрдп



1. рдорд╛рдЗрдХреНрд░реЛрдиреЙрдЯ рдХреНрдпрд╛ рд╣реИ


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

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

2. рдкреНрд░рдореБрдЦ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


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

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

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

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдпрд╣ рд▓реИрдореНрдмреНрдбрд╛ AWS рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕рд░реНрд╡рд░ рд░рд╣рд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

3. рдЖрд░рдВрдн рдХрд░рдирд╛


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ SDKMAN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:

> sdk install micronaut 1.0.0.M2

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

рдмрд╛рдЗрдирд░реА рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдБ рд╕реЛрдирд╛рдЯрд╛рдЗрдк рдФрд░ рдЬреАрдереВрдм рдкрд░ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ, рд╣рдо рдорд╛рдЗрдХреНрд░реЛрдПрдиреЗрдЯ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред

4. рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди (DI)


рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдорд╛рдЗрдХреНрд░реЛрдЗрдиреЗрдЯ рдХрдВрдкрд╛рдЗрд▓ рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ JSR-330 рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреАрди рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдЕрдиреНрдп IoC рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рдорд╛рди рд╣реИред

рд╣рдорд╛рд░реЗ рдХреЛрдб рдореЗрдВ рдПрдХ рдмрд┐рди рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо @Inject рдЙрдкрдпреЛрдЧ @Inject :

 @Inject private EmployeeService service; 

@Inject рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЦреЗрддреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ, рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рднреА рдмреАрдиреНрд╕ рдореЗрдВ рдПрдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИ - рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкред рд╣рдо @Singleton рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд▓реНрджреА рд╕реЗ @Singleton рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХрдИ рд╕реЗрдо рдПрдХ рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рдВрдШрд░реНрд╖ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @Primary рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 @Primary @Singleton public class BlueCar implements Car {} 

рд╕реЗрдо рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдпрд╛ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП @Requires рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдиреЛрдЯреЗрд╢рди - @Conditional рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред

 @Singleton @Requires(beans = DataSource.class) @Requires(property = "enabled") @Requires(missingBeans = EmployeeService) @Requires(sdk = Sdk.JAVA, value = "1.8") public class JdbcEmployeeService implements EmployeeService {} 

5. рдПрдХ HTTP рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдБ


рдЕрдм, рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ HTTP рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо SDKMAN рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

> mn create-app hello-world-server -build maven

рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рд╡реЗрди рдХреЗ рд╕рд╛рде рд╣реЗрд▓реНрд▓реЛ-рд╡рд░реНрд▓реНрдб-рд╕рд░реНрд╡рд░ рдирд╛рдордХ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВрдЧреЗред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ рд╣рдореЗрдВ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб, рдорд╛рд╡реЗрди рдкреЛрдо рдлрд╝рд╛рдЗрд▓ рдФрд░ рдЕрдиреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓реЗрдВрдЧреАред

рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 public class ServerApplication { public static void main(String[] args) { Micronaut.run(ServerApplication.class); } } 

5.1 рдмреНрд▓реЙрдХрд┐рдВрдЧ HttpRequest


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

 @Controller("/greet") public class GreetController { @Inject private GreetingService greetingService; @Get("/{name}") public String greet(String name) { return greetingService.getGreeting() + name; } @Post(value = "/{name}", consumes = MediaType.TEXT_PLAIN) public String setGreeting(@Body String name) { return greetingService.getGreeting() + name; } } 

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

5.2 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ IO


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдорд╛рдЗрдХреЛрдиреЙрдЯ рдЗрди рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдЕрд╡рд░реЛрдзрдХ I / O рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдХреЗрд╡рд▓ рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдХрд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, RxJava рдХреЗ рд╕рд╛рде рд╣рдо рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, рд░рд┐рдПрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рдо Mono рдпрд╛ Flux рдкреНрд░рдХрд╛рд░ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 @Get("/{name}") public Mono<String> greet(String name) { return Mono.just(greetingService.getGreeting() + name); } 

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

 <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-core</artifactId> <version>3.1.8.RELEASE</version> </dependency> 

рдмреНрд▓реЙрдХрд┐рдВрдЧ рдФрд░ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╣реИрдВрдбрд▓рд░ рджреЛрдиреЛрдВ рд╣реА Netty HTTP рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдорддреМрд░ рдкрд░, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдореБрдЦреНрдп I / O рдереНрд░реЗрдб рдкреВрд▓ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджреЗрддрд╛ рд╣реИред

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

6. рдПрдХ HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдПрдБ


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

- рдШреЛрд╖рдгрд╛рддреНрдордХ
- рд╕реЙрдлреНрдЯрд╡реЗрдпрд░

6.1 рдПрдХ HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдШреЛрд╖рдгрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг


рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдФрд░ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИ:

 @Client("/greet") public interface GreetingClient { @Get("/{name}") String greet(String name); } 

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

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

 public class GreetingClientTest { private EmbeddedServer server; private GreetingClient client; @Before public void setup() { server = ApplicationContext.run(EmbeddedServer.class); client = server.getApplicationContext().getBean(GreetingClient.class); } @After public void cleanup() { server.stop(); } @Test public void testGreeting() { assertEquals(client.greet("Mike"), "Hello Mike"); } } 

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдЖрд▓рд╕реА рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрдердм рдкрд░ рддреИрдпрд╛рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ: github.com/jreznot/micronaut-introduction

6.2 рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ


рдкрд╛рд░рдВрдкрд░рд┐рдХ HTTP рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 @Singleton public class ConcreteGreetingClient { private RxHttpClient httpClient; public ConcreteGreetingClient(@Client("/") RxHttpClient httpClient) { this.httpClient = httpClient; } public String greet(String name) { HttpRequest<String> req = HttpRequest.GET("/greet/" + name); return httpClient.retrieve(req).blockingFirst(); } public Single<String> greetAsync(String name) { HttpRequest<String> req = HttpRequest.GET("/async/greet/" + name); return httpClient.retrieve(req).first("An error as occurred"); } } 

рдХреНрд▓рд╛рдЗрдВрдЯ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ RxJava рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдФрд░ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

7. рдЕрдВрддрд░рд┐рдХреНрд╖ рдпрд╛рддреНрд░реА рд╕реАрдПрд▓рдЖрдИ


рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рдХрд┐ рдЬрдм рд╣рдордиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдпрд╛, рддреЛ рдорд╛рдЗрдХреНрд░реЛрдПрдиреЗрдЯ рд╕реАрдПрд▓рдЖрдИ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдиреЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрдИ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред

7.1 рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ (рдлреЗрдбрд░реЗрд╢рди) рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ


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

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

7.2 рд╕реБрд╡рд┐рдзрд╛рдПрдБ


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

рд╣рдо -features рддрд░реНрдХ рдореЗрдВ рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╕реЗ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдк рдирд┐рдореНрди рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 > mn profile-info service Provided Features: -------------------- * annotation-api - Adds Java annotation API * config-consul - Adds support for Distributed Configuration with Consul * discovery-consul - Adds support for Service Discovery with Consul * discovery-eureka - Adds support for Service Discovery with Eureka * groovy - Creates a Groovy application [...] More features available 

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

7.3 рдореМрдЬреВрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ


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

 > mn help | Command Name Command Description ----------------------------------------------- create-bean Creates a singleton bean create-client Creates a client interface create-controller Creates a controller and associated test create-job Creates a job with scheduled method 

8. рдирд┐рд╖реНрдХрд░реНрд╖


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

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

рдЬрдмрдХрд┐ рдорд╛рдЗрдХреНрд░реЛрдлрд╝реЛрди рдХреА рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдореМрдЬреВрджрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЬреИрд╕реЗ рдХрд┐ рдЧреНрд░рд┐рд▓реНрд╕ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЕрдиреВрдареА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рджреВрд╕рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред

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


All Articles