рдХреНрд╡рд╛рд░реНрдХрд╕ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ

рдирдорд╕реНрдХрд╛рд░ рд╕рднреА рдХреЛ, рдФрд░ рдХреНрд╡рд╛рд░реНрдХрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рддреАрд╕рд░реА рдкреЛрд╕реНрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдХреНрд╡рд╛рд░реНрдХрд╕ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ

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

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

рдХреНрд╡рд╛рд░реНрдХрд╕ рдХреНрдпреЛрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд▓рд╛рдЗрд╡ рдХреЛрдбрд┐рдВрдЧ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИ рдФрд░ рдЕрдиреНрдп рдЬрд╛рд╡рд╛ рдПрдкреАрдЖрдИ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛, рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: mvn quarkus:dev. рджреВрд╕рд░рд╛, рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдкрд░реНрд╕рди рд╕реЗрд╡рд╛ (рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ, рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдФрд░ рдЬреЗрдкреАрдП рдПрдкреАрдЖрдИ рд╕реЗ рдПрдХ рдореВрд▓ рдЧреНрд░реЗрд▓рд╡реАрдПрдо рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рдЗрдирд░реА рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддреА рд╣реИ) рдХреЗрд╡рд▓ 0.055 рд╕реЗрдХрдВрдб рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ RESTful рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рд▓рдЧрднрдЧ 90 рдПрдордмреА рдореЗрдореЛрд░реА (рдЖрд░рдПрд╕рдПрд╕) рд▓реЗрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдХрд╛ рд╕рдВрдХрд▓рди рдХреЗрд╡рд▓ рдПрдХ рдХрдорд╛рдВрдб рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: mvn package -Pnative.

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

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

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

рдХреНрд╡рд╛рд░реНрдХрд╕ рднреА рдСрдЯреЛрдЬрдирд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ Kubernetes рд╕рдВрд╕рд╛рдзрди рдФрд░ рдСрдлрд╝рд░ рдЧрд╛рдЗрдб Kubernetes рдФрд░ Red Hat OpenShift рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рддреИрдирд╛рддреА рдкрд░ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреНрд╡рд╛рд░реНрдХрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ Dockerfile.jvm (JVM рдкреИрдХреЗрдЬрд┐рдВрдЧ) рдФрд░ Dockerfile.native (рдиреЗрдЯрд┐рд╡ рдмрд╛рдЗрдирд░реА рдкреИрдХреЗрдЬрд┐рдВрдЧ) рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

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

рддрд╛рд▓рд┐рдХрд╛ 1. рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХрд╛ рдорд╛рдирдЪрд┐рддреНрд░ред

рдХрд╛рд░реНрдпрд╛рддреНрдордХ
рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ
Kubernetes

рд╕реЗрд╡рд╛ рдЦреЛрдЬ
рдпреВрд░реЗрдХрд╛
рдбреАрдПрдирдПрд╕

рд╡рд┐рдиреНрдпрд╛рд╕
рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореИрдкреНрд╕ / рд╕реАрдХреНрд░реЗрдЯреНрд╕

рднрд╛рд░ рд╕рдВрддреБрд▓рди
рд░рд┐рдмрди (рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб)
рд╕реЗрд╡рд╛, рдкреНрд░рддрд┐рдХреГрддрд┐ рдирд┐рдпрдВрддреНрд░рдХ (рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб)

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

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

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

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

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

╨Т рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реАрдбреАрдЖрдИ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреНрд╡рд╛рд░реНрдХрд╕ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рд╕реНрдкреНрд░рд┐рдВрдЧ DI рдЧрд╛рдЗрдб.

рддрд╛рд▓рд┐рдХрд╛ 2. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ DI APIs рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг.

рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ DI рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдЙрджрд╛рд╣рд░рдг

рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЗрдВрдЬреЗрдХреНрд╢рди

public PersonSpringController(
   PersonSpringRepository personRepository,  // injected      
   PersonSpringMPService personService) {    // injected
      this.personRepository = personRepository;
      this.personService = personService;
}

рдлрд╝реАрд▓реНрдб рдЗрдВрдЬреЗрдХреНрд╢рди
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд
рд╡реИрд▓реНрдпреВ

@Autowired
@RestClient
SalutationRestClient salutationRestClient;

@Value("${fallbackSalutation}")
String fallbackSalutation;

рд╕реЗрдо
@рд╡рд┐рдиреНрдпрд╛рд╕

@Configuration
public class AppConfiguration {
   @Bean(name = "capitalizeFunction")
   public StringFunction capitalizer() {
      return String::toUpperCase;
   }
}

рдШрдЯрдХ

@Component("noopFunction")
public class NoOpSingleStringFunction implements StringFunction {
   @Override
   public String apply(String s) {
      return s;
   }
}

рд╕рд░реНрд╡рд┐рд╕

@Service
public class MessageProducer {
   @Value("${greeting.message}")
   String message;

   public String getPrefix() {
      return message;
   }
}

рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ

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

рддрд╛рд▓рд┐рдХрд╛ 3. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм APIs рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг.

рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдХреА рд╕рдорд░реНрдерд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рдЙрджрд╛рд╣рд░рдг

@рд░реЗрд╕реНрдЯрдХрдВрдЯреНрд░реЛрд▓рд░
@рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрдореИрдкрд┐рдВрдЧ

@RestController
@RequestMapping("/person")
public class PersonSpringController {
   ...
   ...
   ...
}

@рдЧреЗрдЯрдореИрдкрд┐рдВрдЧ
@рдкреЛрд╕реНрдЯрдореИрдкрд┐рдВрдЧ
@рдкреБрдЯрдореИрдкрд┐рдВрдЧ
@рдбрд┐рд▓реАрдЯрдореИрдкрд┐рдВрдЧ
@рдкреИрдЪрдореИрдкрд┐рдВрдЧ
@рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрдкреИрд░рд╛рдо
@рдЕрдиреБрд░реЛрдзрд╣реИрдбрд░
@рдореИрдЯреНрд░рд┐рдХреНрд╕рд╡реИрд░рд┐рдПрдмрд▓
@рдкрдердЪрд░
@рдХреБрдХреАрд╡реИрд▓реНрдпреВ
@рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрдмреЙрдбреА
@рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╕реНрдерд┐рддрд┐
@рдПрдХреНрд╕реЗрдкреНрд╢рдирд╣реИрдВрдбрд▓рд░
@RestControllerAdvice (рдЖрдВрд╢рд┐рдХ)

@GetMapping(path = "/greet/{id}",
   produces = "text/plain")
   public String greetPerson(
   @PathVariable(name = "id") long id) {
   ...
   ...
   ...
}

рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП

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

рддрд╛рд▓рд┐рдХрд╛ 4. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ JPA APIs рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг.

рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдЬреЗрдкреАрдП рд╕рдорд░реНрдерд┐рдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рдЙрджрд╛рд╣рд░рдг

рдХреНрд░реВрдбрд░рд┐рдкреЛрдЬрд┐рдЯрд░реА

public interface PersonRepository
         extends JpaRepository,
                 PersonFragment {
   ...
}

рдХреЛрд╖
рдЬреЗрдкреАрдПрд░рд┐рдкреЛрдЬрд┐рдЯрд░реА
рдкреЗрдЬрд┐рдВрдЧрдПрдВрдбрд╕реЙрд░реНрдЯрд┐рдВрдЧрд░рд┐рдкреЛрдЬрд┐рдЯрд░реА

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);
}

рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ

рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛

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

рддрд╛рд▓рд┐рдХрд╛ 5. рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░реЗрдВрд╕ APIs рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгред

рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг

@рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ

рддрд░реНрдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдирд╛

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

@рдмрд▓реНрдХрд╣реЗрдб

рдПрдХ рд╕рд╛рде рдХрд┐рдпреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдХрд░рдирд╛

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

@рдкрд░рд┐рдкрде рд╡рд┐рдпреЛрдЬрдХ

рд╕реНрдорд╛рд░реНрдЯ рд╡рд┐рдлрд▓рддрд╛ рдкреНрд░рдмрдВрдзрди рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐

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

@рдореИрджрд╛рди рдЫреЛрдбрд╝рдирд╛

рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

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

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

рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

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

рдордзреНрдпрд╛рдВрддрд░

рд╡рд┐рдлрд▓рддрд╛ рдирд┐рдЧрд░рд╛рдиреА рд╕рдордп рд╕рдорд╛рдкреНрдд

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

рд╕реЗрд╡рд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ

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

рддрд╛рд▓рд┐рдХрд╛ 6. рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реНрд╡рд╛рд╕реНрдереНрдп APIs рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг.

рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг

@рд▓рд╛рдЗрд╡рдиреЗрд╕

рдпрд╣ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЯреВрдЯреЗ рд╣реБрдП рдХрдВрдЯреЗрдирд░реАрдХреГрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ
рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ:
рд╣реЛрд╕реНрдЯ: 8080/рд╕реНрд╡рд╛рд╕реНрдереНрдп/рд▓рд╛рдЗрд╡

@Liveness
public class MyHC implements HealthCheck {
  public HealthCheckResponse call() {

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

@рддрддреНрдкрд░рддрд╛

рдпрджрд┐ рдХрдВрдЯреЗрдирд░реАрдХреГрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ рддреЛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдЙрд╕ рдкрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛ред
рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ:
рд╣реЛрд╕реНрдЯ: 8080/рд╕реНрд╡рд╛рд╕реНрдереНрдп/рддреИрдпрд╛рд░

@Readiness
public class MyHC implements HealthCheck {
  public HealthCheckResponse call() {

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

рдореЗрдЯреНрд░рд┐рдХреНрд╕

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

╨Т рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ рдХреНрд╡рд╛рд░реНрдХрд╕ рдореИрдиреБрдЕрд▓ рджреЗрдЦреЗрдВред рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЧрд╛рдЗрдб.

рддрд╛рд▓рд┐рдХрд╛ 7. рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ API рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг.

рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг

@рдЧрд┐рдирддреА

рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдиреЛрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред

@Counted(name = "fallbackCounter", 
  displayName = "Fallback Counter", 
  description = "Fallback Counter")
public String salutationFallback() {
   return fallbackSalutation;
}

@рд╕рдорд╡рд░реНрддреАрдЧреЗрдЬ

рдПрдХ рдЧреЗрдЬ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдиреЛрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред

@ConcurrentGuage(
  name = "fallbackConcurrentGauge", 
  displayName="Fallback Concurrent", 
  description="Fallback Concurrent")
public String salutationFallback() {
   return fallbackSalutation;
}

@рдЧреЗрдЬ

рдПрдХ рдЧреЗрдЬ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдиреЛрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдорд╛рдкрддрд╛ рд╣реИред

@Metered(name = "FallbackGauge",
   displayName="Fallback Gauge",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

@рдореАрдЯрд░реНрдб

рдПрдХ рдореАрдЯрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдиреЛрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИред

@Metered(name = "MeteredFallback",
   displayName="Metered Fallback",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

рдореИрдЯреНрд░рд┐рдХ

рдЬрдм рдореАрдЯреНрд░рд┐рдХ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рдпреБрдХреНрдд рдПрдиреЛрдЯреЗрд╢рди

@Metric
@Metered(name = "MeteredFallback",
   displayName="Metered Fallback",
   description="Fallback frequency")
public String salutationFallback() {
   return fallbackSalutation;
}

рд╕рдордпрдмрджреНрдз

рдПрдХ рдЯрд╛рдЗрдорд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдиреЛрдЯреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЕрд╡рдзрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИред

@Timed(name = "TimedFallback",
   displayName="Timed Fallback",
   description="Fallback delay")
public String salutationFallback() {
   return fallbackSalutation;
}

рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдПрдВрдбрдкреЙрдЗрдВрдЯ

рдЖрд╡реЗрджрди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ:8080/рдореЗрдЯреНрд░рд┐рдХреНрд╕/рдПрдкреНрд▓рд┐рдХреЗрд╢рди
рдмреБрдирд┐рдпрд╛рджреА рдореАрдЯреНрд░рд┐рдХреНрд╕ рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ:8080/рдореЗрдЯреНрд░рд┐рдХреНрд╕/рдмреЗрд╕
рд╡рд┐рдХреНрд░реЗрддрд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ:8080/рдореЗрдЯреНрд░рд┐рдХреНрд╕/рд╡рд┐рдХреНрд░реЗрддрд╛
рд╕рднреА рдореАрдЯреНрд░рд┐рдХреНрд╕ рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ:8080/рдореАрдЯреНрд░рд┐рдХреНрд╕

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

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

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

рддрд╛рд▓рд┐рдХрд╛ 8. рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ APIs рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг.

рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реБрд╡рд┐рдзрд╛рдПрдБ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг

@рд░рдЬрд┐рд╕реНрдЯрд░рд░реЗрд╕реНрдЯрдХреНрд▓рд╛рдЗрдВрдЯ

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

@RegisterRestClient
@Path("/")
public interface MyRestClient {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getSalutation();
}

@рд░реЗрд╕реНрдЯрдХреНрд▓рд╛рдЗрдВрдЯ

рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП REST рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ

@Autowired // or @Inject
@RestClient
MyRestClient restClient;

рдордВрдЧрд▓рд╛рдЪрд░рдг

REST рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ

System.out.println(
   restClient.getSalutation());

mp-rest/url

REST рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ

application.properties:
org.example.MyRestClient/mp-rest/url=
   http://localhost:8081/myendpoint

рдкрд░рд┐рдгрд╛рдо

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

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

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

DDoS рд╕реБрд░рдХреНрд╖рд╛, VPS VDS рд╕рд░реНрд╡рд░ рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЦрд░реАрджреЗрдВ ЁЯФе рдбреАрдбреАрдУрдПрд╕ рд╕реБрд░рдХреНрд╖рд╛, рд╡реАрдкреАрдПрд╕ рдФрд░ рд╡реАрдбреАрдПрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдЦрд░реАрджреЗрдВ | ProHoster