рдХрд╕рд░реА рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░ рд╡рд╕рдиреНрддрд▓рд╛рдИ рдЬреЛрдбреНрджрдЫ

рд╕рдмреИрд▓рд╛рдИ рдирдорд╕реНрдХрд╛рд░, рд░ рдХреНрд╡рд╛рд░реНрдХрд╕ рд╢реГрдЩреНрдЦрд▓рд╛рдХреЛ рддреЗрд╕реНрд░реЛ рдкреЛрд╕реНрдЯрдорд╛ рд╕реНрд╡рд╛рдЧрдд рдЫ!

рдХрд╕рд░реА рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд░ рд╡рд╕рдиреНрддрд▓рд╛рдИ рдЬреЛрдбреНрджрдЫ

рдЬрд╛рднрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрдЬрд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджрд╛, рдкреНрд░рд╛рдпрдГ рдпреЛ рдорд╛рдирд┐рдиреНрдЫ рдХрд┐ рдЗрдХреНрд▓рд┐рдкреНрд╕ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ ╨╕ рд╡рд╕рдиреНрдд рдмреБрдЯ тАУ рдЫреБрдЯреНрдЯрд╛рдЫреБрдЯреНрдЯреИ рд░ рд╕реНрд╡рддрдиреНрддреНрд░ API рд╣рд░реВ рд╣реБрдиреНред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рд╣рд░реВрд▓реЗ рдкрд╣рд┐рд▓реЗ рдиреИ рдЕрднреНрдпрд╕реНрдд API рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЧрд░реНрдЫрдиреН, рдХрд┐рдирдХрд┐ рдирдпрд╛рдБ рдлреНрд░реЗрдорд╡рд░реНрдХ рд░ рд░рдирдЯрд╛рдЗрдо рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд╣рд░реВ рд╕рд┐рдХреНрди рдзреЗрд░реИ рд╕рдордп рд▓рд╛рдЧреНрдЫред рдЖрдЬ рд╣рд╛рдореА рдХреЗрд╣реА рд▓реЛрдХрдкреНрд░рд┐рдпрд╣рд░реВрдХреЛ рд╕рд┐рдХрд╛рдЗрд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВред рд╕реНрдкреНрд░рд┐рдЩ рдбреЗрднрд▓рдкрд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИ рд░ рдирдпрд╛рдБ рдЙрдкрдпреЛрдЧреА рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдПрдХреИ рд╕рдордпрдорд╛ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдиреБрд╣реЛрд╕реНред рдХреНрд╡рд╛рд░реНрдХрд╕.

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

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

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

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

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

рдХреНрд╡рд╛рд░реНрдХрд╕ рдкрдирд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЙрддреНрдкрд╛рджрдирд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╕реНрд░реЛрддрд╣рд░реВ рд░ рдкреНрд░рд╕реНрддрд╛рд╡рд╣рд░реВ рдиреЗрддреГрддреНрд╡ Kubernetes рд░ Red Hat OpenShift рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдорд╛ рддреИрдирд╛рддреАрдХрд╛ рд▓рд╛рдЧрд┐ред рдпрд╕рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, Quarkus рд▓реЗ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗ Dockerfile.jvm (JVM рдкреНрдпрд╛рдХреЗрдЬрд┐рдЩ) рд░ Dockerfile.native (рдиреЗрдЯрд┐рдн рдмрд╛рдЗрдирд░реА рдкреНрдпрд╛рдХреЗрдЬрд┐рдЩ) рдлрд╛рдЗрд▓рд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫред

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

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

рдХрд╛рд░реНрдпрд╛рддреНрдордХ
рдкрд░рдореНрдкрд░рд╛рдЧрдд рд╡рд╕рдиреНрдд рдмреБрдЯ
рдХреБрдмрд░реНрдиреЗрдЯреНрд╕

рд╕реЗрд╡рд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░
рдпреБрд░реЗрдХрд╛
DNS

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди
рд╕реНрдкреНрд░рд┐рдЩ рдХреНрд▓рд╛рдЙрдб рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди
рдХрдиреНрдлрд┐рдЧ рдирдХреНрд╕рд╛ / рдЧреЛрдкреНрдп рдХреБрд░рд╛рд╣рд░реВ

рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд┐рдВрдЧ
рд░рд┐рдмрди (рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖)
рд╕реЗрд╡рд╛, рдкреНрд░рддрд┐рдХреГрддрд┐ рдирд┐рдпрдиреНрддреНрд░рдХ (рд╕рд░реНрднрд░ рд╕рд╛рдЗрдб)

рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХрдореНрдкрд╛рдЗрд▓ рд░ рдЪрд▓рд╛рдЙрдБрджреИ

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

рд╕реНрдкреНрд░рд┐рдЩ рдлреНрд░реЗрдорд╡рд░реНрдХ API рд╣рд░реВ

рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди

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

╨Т рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдмрд╛рдЯ рдкрд░рд┐рдпреЛрдЬрдирд╛ CDI рд░ Spring Dependency Injection рджреБрд╡реИ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рдердк рдЬрд╛рдирдХрд╛рд░реА рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ Quarkus Manual рдорд╛ рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ рдЬрд╕рд▓рд╛рдИ рд╡рд╕рдиреНрдд DI рдЧрд╛рдЗрдб.

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

рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ 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 рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛рдХреЛ рдХрджрд░ рдЧрд░реНрдиреЗрдЫрдиреНред рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рд╣рд╛рд▓реИ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм API рд╣рд░реВ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА REST-рд╕рдЪреЗрдд рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рдердкреЗрдХреЛ рджреЗрдЦреЗрд░ рдЦреБрд╕реА рд╣реБрдиреЗрдЫрдиреНред рд╕реНрдкреНрд░рд┐рдВрдЧ DI рдЬрд╕реНрддреИ, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм API рд╕рдорд░реНрдердирдХреЛ рдкреНрд░рд╛рдердорд┐рдХ рд▓рдХреНрд╖реНрдп рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ API рд╣рд░реВрд╕рдБрдЧреИ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм API рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреБ рд╣реЛред рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм API рд╣рд░реВ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛ рей рдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдердк рдЬрд╛рдирдХрд╛рд░реА рд░ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдХреНрд╡рд╛рд░реНрдХрд╕ рдЧрд╛рдЗрдбрдорд╛ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХрд┐рдиреНрдЫред рд╡рд╕рдиреНрдд рд╡реЗрдм рдЧрд╛рдЗрдб.

рддрд╛рд▓рд┐рдХрд╛ рей. рд╕рдорд░реНрдерд┐рдд рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдм рдПрдкреАрдЖрдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВред

рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡реЗрдмрдХрд╛ рд╕рдорд░реНрдерд┐рдд рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ
рдЙрджрд╛рд╣рд░рдг

@рд░реЗрд╕реНрдЯрдХрдиреНрдЯреНрд░реЛрд▓рд░
@RequestMapping рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН

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

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

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

рд╕реНрдкреНрд░рд┐рдЩ рдбрд╛рдЯрд╛ JPA

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

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

рд╕реНрдкреНрд░рд┐рдЩ рдбрд╛рдЯрд╛ JPA рд╕рдорд░реНрдерд┐рдд рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ
рдЙрджрд╛рд╣рд░рдг

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

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

рднрдгреНрдбрд╛рд░
JpaRepository рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗ рд╕рдмреИ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред
рдкреГрд╖реНрдард╛рдВрдХрди рд░ рдХреНрд░рдордмрджреНрдз рднрдгреНрдбрд╛рд░

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 рд╣рд░реВ

рдЧрд▓реНрддреА рд╕рд╣рдирд╢реАрд▓рддрд╛

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

рддрд╛рд▓рд┐рдХрд╛ рел. рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдЧрд▓реНрддреА рд╕рд╣рдирд╢реАрд▓рддрд╛ API рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВред

рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдЧрд▓реНрддреА рд╕рд╣рдирд╢реАрд▓рддрд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ
рд╡рд┐рд╡рд░рдг
рдЙрджрд╛рд╣рд░рдг

@рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕

рдЫреБрдЯреНрдЯреИ рдереНрд░реЗрдбрдорд╛ рддрд░реНрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджреИ

@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(); //...
}

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

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

рддрд╛рд▓рд┐рдХрд╛ рем. рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рд╣реЗрд▓реНрде рдПрдкреАрдЖрдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВред

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

@рдЬреАрд╡рди

рдкреНрд▓реЗрдЯрдлрд░реНрдорд▓реЗ рднрд╛рдБрдЪрд┐рдПрдХрд╛ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬреНрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд░рд┐рдмреБрдЯ рдЧрд░реНрдЫред
рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБ:
рд╣реЛрд╕реНрдЯ: реорежреореж/рд╕реНрд╡рд╛рд╕реНрдереНрдп/рдкреНрд░рддреНрдпрдХреНрд╖

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

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

@рддрдпрд╛рд░реА

рдпрджрд┐ рдкреНрд▓реЗрдЯрдлрд░реНрдо рддрдпрд╛рд░ рдЫреИрди рднрдиреЗ рдХрдиреНрдЯреЗрдирд░рд╛рдЗрдЬреНрдб рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдорд╛ рдЯреНрд░рд╛рдлрд┐рдХ рдкрдард╛рдЙрдиреЗ рдЫреИрдиред
рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБ:
рд╣реЛрд╕реНрдЯ: реорежреореж/рд╕реНрд╡рд╛рд╕реНрдереНрдп/рддрдпрд╛рд░

@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 рд░ OpenMetrics (Prometheus) рдЖрдЙрдЯрдкреБрдЯ рдврд╛рдБрдЪрд╛рд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ API рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛ рен рдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред

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

рддрд╛рд▓рд┐рдХрд╛ рен. рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдореЗрдЯреНрд░рд┐рдХреНрд╕ 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;
}

рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЕрдиреНрддреНрдпрдмрд┐рдиреНрджреБрд╣рд░реВ

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ:реорежреореж/рдореЗрдЯреНрд░рд┐рдХреНрд╕/рдЖрд╡реЗрджрди
рдЖрдзрд╛рд░рднреВрдд рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ:реорежреореж/рдореЗрдЯреНрд░рд┐рдХреНрд╕/рдЖрдзрд╛рд░
рд╡рд┐рдХреНрд░реЗрддрд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ:реорежреореж/рдореЗрдЯреНрд░рд┐рдХреНрд╕/рд╡рд┐рдХреНрд░реЗрддрд╛
рд╕рдмреИ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ:реорежреореж/рдореЗрдЯреНрд░рд┐рдХреНрд╕

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

рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрдЬрд╣рд░реВрд▓реЗ рдкреНрд░рд╛рдпрдГ RESTful рдЕрдиреНрддреНрдп рдмрд┐рдиреНрджреБрд╣рд░реВ рдЙрдЬрд╛рдЧрд░ рдЧрд░реНрдЫрдиреН рдЬрд╕рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕рдореНрдмрдиреНрдзрд┐рдд рдХреНрд▓рд╛рдЗрдиреНрдЯ API рд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫред RESTful рдЕрдиреНрддреНрдп рдмрд┐рдиреНрджреБрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди, рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ RestTemplate рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред рдЕрд░реНрдХреЛрддрд░реНрдл, рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рдпрд╕ рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдЖрд░рд╛рдо рдХреНрд▓рд╛рдЗрдиреНрдЯ API рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рдЬрд╕рдХрд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рддрд╛рд▓рд┐рдХрд╛ рео рдорд╛ рджрд┐рдЗрдПрдХрд╛ рдЫрдиреНред

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

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

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

@RegisterRestClient рд▓рд╛рдИ рд╕рдореНрдкрд░реНрдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдЯрд╛рдЗрдк рдЧрд░рд┐рдПрдХреЛ рдЬрд╛рднрд╛ рдЗрдиреНрдЯрд░рдлреЗрд╕рд▓рд╛рдИ 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-рд░реЗрд╕реНрдЯ/url

REST рдЕрдиреНрддреНрдпрдмрд┐рдиреНрджреБ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрджрдЫ

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

рдкрд░рд┐рдгрд╛рдорд╣рд░реВ

рдпрд╕ рдмреНрд▓рдЧрдорд╛, рдЬреБрди рдореБрдЦреНрдпрддрдпрд╛ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛ, рд╣рд╛рдореАрд▓реЗ рдХреНрд╡рд╛рд░реНрдХрд╕рд▓реЗ рдЬрд╛рднрд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕рд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдкреАрдЖрдИрд╣рд░реВ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИрд╣рд░реВрд╕рдБрдЧреИ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫ рд░ рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдиреЗрдЯрд┐рдн рдмрд╛рдЗрдирд░реАрд╣рд░реВрдорд╛ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдЫ рдЬрд╕рд▓реЗ рд╕рдпреМрдВ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд░реНрдпрд╛рдо рдмрдЪрдд рдЧрд░реНрдЫ рд░ рдорд┐рд▓рд┐рд╕реЗрдХреЗрдиреНрдбрдорд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗрдорд╛ рджреНрд░реБрдд рд░реВрдкрдорд╛ рд╣реЗрд░реНтАНрдпреМрдВред

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

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

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