рдХреНрд╡рд╛рд░реНрдХрд╕ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рдФрд░ рдЖрдкрдХреЗ рд╕рд╛рде рдХреНрд╡рд╛рд░реНрдХрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рддреАрд╕рд░реА рдкреЛрд╕реНрдЯ! (рд╡реИрд╕реЗ, рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд╡реЗрдмрд┐рдирд╛рд░ рдкрд░ рдЬрд╛рдПрдВ " рдпрд╣ рдХреНрд╡рд╛рд░реНрдХрд╕ рд╣реИ - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореВрд▓ рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ ", рдЬреЛ 27 рдордИ рдХреЛ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдпрд╛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ)



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

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

рдХреНрд╡рд╛рд░реНрдХрд╕ рдХреНрдпреЛрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд▓рд╛рдЗрд╡ рдХреЛрдбрд┐рдВрдЧ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИ рдФрд░ рдЕрдиреНрдп рдЬрд╛рд╡рд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рд╕реНрд╡рдд: рд▓реЛрдбрд┐рдВрдЧ, рдЬреЛ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: mvan рдХреНрд╡рд╛рд░реНрдХрд╕: рджреЗрд╡ред рджреВрд╕рд░реЗ, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИрд╡реНрдпрдХреНрддрд┐ рд╕реЗрд╡рд╛ (рдЗрд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ, рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рдЬреЗрдкреАрдП рдПрдкреАрдЖрдИ рд╕реЗ рджреЗрд╢реА рдЧреНрд░реЗрд╡рд╛рд▓рдо рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдХреЗрд╡рд▓ 0.055 рд╕реЗрдХрдВрдб рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ рд░реЗрд╕реНрдЯрдлреБрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рдЧрднрдЧ 90 рдПрдордмреА рд░реИрдо (рдЖрд░рдПрд╕рдПрд╕) рд▓реЗрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХрд╛ рд╕рдВрдХрд▓рди рдХреЗрд╡рд▓ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: mvan рдкреИрдХреЗрдЬ -nativeред

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

рдХрдВрдЯреЗрдирд░ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕


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

рдХреНрд╡рд╛рд░реНрдХрд╕ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдСрдЯреЛ- рдЬрдирд░реЗрд╢рди рдСрдл рд░рд┐рд╕реЛрд░реНрд╕ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдФрд░ рд░реЗрдб рд╣реИрдЯ рдУрдкрдирд╢рд┐рдлреНрдЯ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рддреИрдирд╛рддреА рдЧрд╛рдЗрдб рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд╡рд╛рд░реНрдХрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Dockerfile.jvm (JVM рдкреИрдХреЗрдЬрд┐рдВрдЧ) рдФрд░ Dockerfile.native (рджреЗрд╢реА рдмрд╛рдЗрдирд░реА рдкреИрдХреЗрдЬрд┐рдВрдЧ) рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

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

рддрд╛рд▓рд┐рдХрд╛ 1. рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдорд╛рдирдЪрд┐рддреНрд░рдг рдорд╛рдирдЪрд┐рддреНрд░ред
рдХрд╛рд░реНрдпрд╛рддреНрдордХрдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯKubernetes
рд╕реЗрд╡рд╛ рдЦреЛрдЬрдпреВрд░реЗрдХрд╛рдбреАрдПрдирдПрд╕
рд╡рд┐рдиреНрдпрд╛рд╕рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдорд╛рдирдЪрд┐рддреНрд░ / рд░рд╛рдЬ
рднрд╛рд░ рд╕рдВрддреБрд▓рдирд░рд┐рдмрди (рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖)рд╕реЗрд╡рд╛, рдкреНрд░рддрд┐рдХреГрддрд┐ рдирд┐рдпрдВрддреНрд░рдХ (рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб)

рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╣реА рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП README.md рдлрд╝рд╛рдЗрд▓ рджреЗрдЦреЗрдВред

рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдкреАрдЖрдИ


рдирд┐рд░реНрднрд░рддрд╛ рдЕрдиреНрддрдГрдХреНрд╖реЗрдкрдг


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



рддрд╛рд▓рд┐рдХрд╛ 2. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбрд┐ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ DI рд╕реБрд╡рд┐рдзрд╛рдПрдБ
Constructor Injection
public PersonSpringController(
   PersonSpringRepository personRepository,  // injected      
   PersonSpringMPService personService) {    // injected
      this.personRepository = personRepository;
      this.personService = personService;
}
Field Injection
Autowired
Value
@Autowired
@RestClient
SalutationRestClient salutationRestClient;

@Value("${fallbackSalutation}")
String fallbackSalutation;
Bean
@Configuration
@Configuration
public class AppConfiguration {
   @Bean(name = "capitalizeFunction")
   public StringFunction capitalizer() {
      return String::toUpperCase;
   }
}
Component
@Component("noopFunction")
public class NoOpSingleStringFunction implements StringFunction {
   @Override
   public String apply(String s) {
      return s;
   }
}
Service
@Service
public class MessageProducer {
   @Value("${greeting.message}")
   String message;

   public String getPrefix() {
      return message;
   }
}

-


MicroProfile рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ JAX-RS, MicroProfile Rest Client, JSON-P рдФрд░ JSON-B рдХреЛ рдЕрдкрдиреЗ рдкреНрд░рд╛рдердорд┐рдХ рд╡реЗрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд╡рд╛рд░реНрдХрд╕ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВрдЧреЗред рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреЗ рд╣рд╛рд▓рд┐рдпрд╛ рд╕рдорд░реНрдерди рд╕реЗ рдкреНрд░рд╕рдиреНрди рд╣реЛрдВрдЧреЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрд░рдИрдПрд╕рдЯреА рдЗрдВрдЯрд░рдлреЗрд╕ред рд╕реНрдкреНрд░рд┐рдВрдЧ рдбрд┐ рдХреЗ рд╕рдорд╛рди, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рд▓рдХреНрд╖реНрдп рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рддрд╛рд▓рд┐рдХрд╛ 3 рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреНрд╡рд╛рд░реНрдХрд╕ рдЧрд╛рдЗрдб рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдЧрд╛рдЗрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рддрд╛рд▓рд┐рдХрд╛ 3. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рд╕реБрд╡рд┐рдзрд╛рдПрдБрдЙрджрд╛рд╣рд░рдг
@RestController
@RequestMapping
@RestController
@RequestMapping("/person")
public class PersonSpringController {
   ...
   ...
   ...
}
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@RequestParam
@RequestHeader
@MatrixVariable
@PathVariable
@CookieValue
@RequestBody
@ResponseStatus
@ExceptionHandler
@RestControllerAdvice (partial)
@GetMapping(path = "/greet/{id}",
   produces = "text/plain")
   public String greetPerson(
   @PathVariable(name = "id") long id) {
   ...
   ...
   ...
}

Spring Data JPA


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

рддрд╛рд▓рд┐рдХрд╛ 4. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ JPA рд╕реБрд╡рд┐рдзрд╛рдПрдБрдЙрджрд╛рд╣рд░рдг
Crudrepository
public interface PersonRepository
         extends JpaRepository,
                 PersonFragment {
   ...
}
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА
JpaRepository
PagingAndSortingRepository
public class PersonRepository extends 

    Repository {

    Person save(Person entity);

    Optional findById(Person entity);
}
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдлреНрд░реЗрдЧрдореЗрдВрдЯ
public interface PersonRepository
         extends JpaRepository,
                 PersonFragment {
   ...
}
рд╡реНрдпреБрддреНрдкрдиреНрди рдХреНрд╡реЗрд░реА рд╡рд┐рдзрд┐рдпрд╛рдБ
public interface PersonRepository extends CrudRepository {

    List findByName(String name);
    
    Person findByNameBySsn(String ssn);
    
    Optional 
       findByNameBySsnIgnoreCase(String ssn);

    Boolean existsBookByYearOfBirthBetween(
            Integer start, Integer end);
}
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рд╢реНрди
public interface MovieRepository
         extends CrudRepository {

    Movie findFirstByOrderByDurationDesc();

    @Query("select m from Movie m where m.rating = ?1")
    Iterator findByRating(String rating);

    @Query("from Movie where title = ?1")
    Movie findByTitle(String title);
}

API- MicroProfile


(Fault tolerance)


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

рддрд╛рд▓рд┐рдХрд╛ 5. рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░реЗрдВрд╕ рдлреАрдЪрд░реНрд╕рд╡рд┐рд╡рд░рдгрдЙрджрд╛рд╣рд░рдг
@Asynchronous

@Asynchronous
@Retry
public Future<String> getSalutation() {
   ...
   return future;
}
@Bulkhead

@Bulkhead(5)
public void fiveConcurrent() {
   makeRemoteCall(); //...
}
@CircuitBreaker

@CircuitBreaker(delay=500   // milliseconds
   failureRatio = .75,
   requestVolumeThreshold = 20,
   successThreshold = 5)
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}
@Fallback

@Timeout(500) // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

public String fallback() {
   return "hello";
}
Retry

@Retry(maxRetries=3)
public String getSalutation() {
   makeRemoteCall(); //...
}
Timeout

@Timeout(value = 500 )   // milliseconds
@Fallback(fallbackMethod = "fallback")
public String getSalutation() {
   makeRemoteCall(); //...
}

(Service Health)


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

рддрд╛рд▓рд┐рдХрд╛ 6. рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реЗрд▓реНрде рдПрдкреАрдЖрдИ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕реБрд╡рд┐рдзрд╛рдПрдБрд╡рд┐рд╡рд░рдгрдЙрджрд╛рд╣рд░рдг
@Liveness

Endpoint:
host:8080/health/live
@Liveness
public class MyHC implements HealthCheck {
  public HealthCheckResponse call() {

   ...
   return HealthCheckResponse
     .named("myHCProbe")
     .status(ready ? true:false)
     .withData("mydata", data)
     .build();  
}
@Readiness

Endpoint:
host:8080/health/ready
@Readiness
public class MyHC implements HealthCheck {
  public HealthCheckResponse call() {

   ...
   return HealthCheckResponse
     .named("myHCProbe")
     .status(live ? true:false)
     .withData("mydata", data)
     .build();  
}


рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдпрд╛ рддреЛ рдкрд░рд┐рдЪрд╛рд▓рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ (SLA рдкреНрд░рджрд░реНрд╢рди рд╕рдВрдХреЗрддрдХреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдпрд╛ рдЧреИрд░-рд╕рдВрдЪрд╛рд▓рди (рд╡реНрдпрд╡рд╕рд╛рдп SLA рд╕рдВрдХреЗрддрдХ) рдХреЗ рд▓рд┐рдП рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдХреНрдЯреНрдпреВрдПрдЯрд░ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдмрджрд▓реЗ рдореЗрдВ, рдХреНрд╡рд╛рд░реНрдХрд╕ рдмреБрдирд┐рдпрд╛рджреА рдореИрдЯреНрд░рд┐рдХреНрд╕ (рдЬреЗрд╡реАрдПрдо рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо), рд╡реЗрдВрдбрд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ (рдХреНрд╡рд╛рд░реНрдХрд╕), рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред MicroProfile рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди JSON рдФрд░ OpenMetrics (Prometheus) рдЖрдЙрдЯрдкреБрдЯ рд╕реНрд╡рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред MicroProfile рдореЗрдЯреНрд░рд┐рдХреНрд╕ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рддрд╛рд▓рд┐рдХрд╛ 7

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

7. API- MicroProfile Metrics.
MicroProfile Metrics
@Counted
counter-,
@Counted(name = "fallbackCounter", 
  displayName = "Fallback Counter", 
  description = "Fallback Counter")
public String salutationFallback() {
   return fallbackSalutation;
}
@ConcurrentGauge
gauge-,
@ConcurrentGuage(
  name = "fallbackConcurrentGauge", 
  displayName="Fallback Concurrent", 
  description="Fallback Concurrent")
public String salutationFallback() {
   return fallbackSalutation;
}
@Gauge
gauge-,
@Metered(name = "FallbackGauge",
   displayName="Fallback Gauge",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}
@Metered
meter-,
@Metered(name = "MeteredFallback",
   displayName="Metered Fallback",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}
Metric
, ,
@Metric
@Metered(name = "MeteredFallback",
   displayName="Metered Fallback",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}
Timed
,
@Timed(name = "TimedFallback",
   displayName="Timed Fallback",
   description="Fallback delay")
public String salutationFallback() {
   return fallbackSalutation;
}

рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ : 8080 / рдореЗрдЯреНрд░рд┐рдХреНрд╕ / рдПрдкреНрд▓реАрдХреЗрд╢рди рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдмреЗрд╕рд┐рдХ рдореЗрдЯреНрд░рд┐рдХреНрд╕ : 8080 / рдореЗрдЯреНрд░рд┐рдХреНрд╕ / рдмреЗрд╕ рд╡реЗрдВрдбрд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдлреЙрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ : 8080 / рдореЗрдЯреНрд░рд┐рдХреНрд╕ / рд╡рд┐рдХреНрд░реЗрддрд╛ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рдореЗрдЯреНрд░рд┐рдХреНрд╕ : 8080 / рдореЗрдЯреНрд░рд┐рдХреНрд╕




рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ


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

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

рддрд╛рд▓рд┐рдХрд╛ 8. MicroProfile рдмрд╛рдХреА рдХреНрд▓рд╛рдЗрдВрдЯ APIs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгред
MicroProfile рдмрд╛рдХреА рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реБрд╡рд┐рдзрд╛рдПрдБрд╡рд┐рд╡рд░рдгрдЙрджрд╛рд╣рд░рдг
@RegisterRestClient
REST рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ Java рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ
@RegisterRestClient
@Path("/")
public interface MyRestClient {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getSalutation();
}
@RestClient
рдПрдХ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП REST рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ
@Autowired // or @Inject
@RestClient
MyRestClient restClient;
рдордВрдЧрд▓рд╛рдЪрд░рдг
REST рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
System.out.println(
   restClient.getSalutation());
рдПрдордкреА-рдмрд╛рдХреА / url
рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ
application.properties:
org.example.MyRestClient/mp-rest/url=
   http://localhost:8081/myendpoint

рд╕рд╛рд░рд╛рдВрд╢


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

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдордЭрддреЗ рд╣реИрдВ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдПрдХ рдореЗрдЬрдмрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА, рдХреНрд╡рд╛рд░реНрдХрд╕ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

All Articles