рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!

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

Microservices рдХреЗ рдореБрдЦреНрдп рд▓рд╛рдн:

  • рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлрд╝реНрдЯ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдвреАрд▓рд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ

  • рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлрд╝реНрдЯ рд╡рд┐рднрд┐рдиреНрди рдЯреАрдореЛрдВ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЫреЛрдЯреЗ рдШрдЯрдХреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рддреИрдирд╛рддреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдХ REST API рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

  • рд╕реЗрд╡рд╛рдУрдВ рдХреА рдЦреЛрдЬ рдФрд░ рдХреЙрд▓ рд╕реЗрд╡рд╛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ

  • рд╕реНрд╡реИрдЧрд░ рдордЬрдмреВрдд рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдХреЙрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддрд╛ рд╣реИ

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



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

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



рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдмрдирд╛рдиреЗ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдЗрдП, рдХрдВрд╕реБрд▓ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рдХреЗ рдЕрдкрдирд╛ рд╡рд╛рддрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рдХрд░реЗрдВред

рдХрдВрд╕рд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ


рд╣рдо рд╕реЗрд╡рд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рд╣реИрд╢рд┐рдХреЙрд░реНрдк рдХрдВрд╕рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП www.consul.io/downloads.html рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕, рдореИрдХ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдХрдВрд╕рд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдкрде рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХреМрдВрд╕рд▓ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ


рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рдкрд░, рдХреЙрдиреНрд╕реБрд▓ рдХреЛ рджреЗрд╡ рдореЛрдб рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛:

consul agent -dev 

рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдХрдВрд╕реЛрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ http: // localhost: 8500 ред рдпрджрд┐ рд╕рдм рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреМрдВрд╕рд▓ рдХреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╣ рдЬреАрд╡рд┐рдд рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗред рдХрдВрд╕реБрд▓ рд╕реЗрд╡рд╛ (рдмрд╛рдИрдВ рдУрд░) рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА (рджрд╛рдИрдВ рдУрд░)ред



рдпрджрд┐ рдЗрд╕ рд╕рдордп рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдХрдВрд╕реБрд▓ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрди рдкрде рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ 8500 рдФрд░ 8600 рдкреЛрд░реНрдЯ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

рдПрдХ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ


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

рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП "рдлрд╝рд╛рдЗрд▓ / рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛" рдЪреБрдиреЗрдВ, рдФрд░ рдлрд┐рд░ "рд╕реНрдкреНрд░рд┐рдВрдЧ рдкреНрд░рд┐рдиреНрдЯрд┐рдЬрд╝рд░"ред



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧрдмреВрдЯ рдЗрдирд┐рдЧреНрдирд┐рдЬрд╝реНрд░ рд╡реЗрдм рдкреЗрдЬ start.spring.io рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдСрдирд▓рд╛рдЗрди рдлреЙрд░реНрдо рднрд░рдХрд░ рдЖрдИрдбреАрдИ рдХреЗ рдмрд┐рдирд╛ рдордЪрд╛рди рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЗ рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧрд╛, рдЬреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

"рдЕрдЧрд▓рд╛" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рднрд░реЗрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:



рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрдЧрд▓рд╛" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЦреЛрдЬ рдореЗрдВ "рдЬрд░реНрд╕реА" рдФрд░ "рдХрдВрд╕рд▓ рдбрд┐рд╕реНрдХрд╡рд░реА" рджрд░реНрдЬ рдХрд░реЗрдВред рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдФрд░ рдЙрд╕рдХреЗ рд╕реНрдерд╛рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрдЧрд▓рд╛" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдо "рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ" рд░рдЦреЗрдВ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкрд╕рдВрджреАрджрд╛ рд╕реНрдерд╛рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдлрд┐рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдФрд░ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП "рдЦрддреНрдо" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:



рд╣рдо рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ, рд▓реЗрдХрд┐рди рд╕реНрдкреНрд░рд┐рдВрдЧрдмреВрдЯ рднреА YAML рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рд╣реИ, рддреЛ рдЖрдЗрдП рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ application.yml рдХрд░реЗрдВред

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

 spring: application: name: portfolio-service server: port: 57116 

рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд╕реНрдкреНрд░рд┐рдВрдЧрдмреВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд░реНрдЧ рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝реЗрдВред PortAppApplication рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреЛрд▓реЗрдВ рдФрд░ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдХреЗ рдКрдкрд░ @EnableDiscoveryClient рдЬреЛрдбрд╝реЗрдВред

рдЖрдпрд╛рдд рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВред рд╡рд░реНрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

 package com.restms.demo.portfolio; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; . . . @SpringBootApplication @EnableDiscoveryClient public class PortfolioApplication { public static void main(String[] args) { SpringApplication.run(PortfolioApplication.class, args); } } 

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

 @Configuration @ApplicationPath("portfolios") public class JerseyConfig extends ResourceConfig { public JerseyConfig() { register(PortfolioImpl.class); } } 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЬрд░реНрд╕реА рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ResourceConfig рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред @ApplicationPath ("рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ") рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЙрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЙрд▓ "рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ" рдкрде рддрддреНрд╡ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред (рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрджрд░реНрдн "/" рд╣реИ)ред

PortIImpl рд╡рд░реНрдЧ рджреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛: рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ / рдЧреНрд░рд╛рд╣рдХ / {рдЧреНрд░рд╛рд╣рдХ-рдЖрдИрдбреА} рд╕рднреА рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ рдФрд░ рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ / рдЧреНрд░рд╛рд╣рдХ / {рдЧреНрд░рд╛рд╣рдХ-рдЖрдИрдбреА} / рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ / {рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ-рдЖрдИрдбреА} рдПрдХ рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдПрдХ рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ рдореЗрдВ рдЯрд┐рдХрд░ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдФрд░ рдЙрд╕ рдЯрд┐рдХрд░ рджреНрд╡рд╛рд░рд╛ рд░рдЦреЗ рдЧрдП рд╢реЗрдпрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред (рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ 0, 1 рдФрд░ 2 рдХреЗ рд╕рд╛рде рддреАрди рдЧреНрд░рд╛рд╣рдХ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд╛рд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ 0, 1 рдФрд░ 2 рдХреЗ рд╕рд╛рде рддреАрди рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ рд╣реИрдВ)ред

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

 @Component @Path("/") public class PortfolioImpl implements InitializingBean { private Object[][][][] clientPortfolios; @GET @Path("customer/{customer-id}") @Produces(MediaType.APPLICATION_JSON) // a portfolio consists of an array of arrays, each containing an array of // stock ticker and associated shares public Object[][][] getPortfolios(@PathParam("customer-id") int customerId) { return clientPortfolios[customerId]; } @GET @Path("customer/{customer-id}/portfolio/{portfolio-id}") @Produces(MediaType.APPLICATION_JSON) public Object[][] getPortfolio(@PathParam("customer-id") int customerId, @PathParam("portfolio-id") int portfolioId) { return getPortfolios(customerId)[portfolioId]; } @Override public void afterPropertiesSet() throws Exception { Object[][][][] clientPortfolios = { { // 3 customers, 3 portfolios each {new Object[]{"JPM", 10201}, new Object[]{"GE", 20400}, new Object[]{"UTX", 38892}}, {new Object[]{"KO", 12449}, new Object[]{"JPM", 23454}, new Object[]{"MRK", 45344}}, {new Object[]{"WMT", 39583}, new Object[]{"DIS", 95867}, new Object[]{"TRV", 384756}}, }, { {new Object[]{"GE", 38475}, new Object[]{"MCD", 12395}, new Object[]{"IBM", 91234}}, {new Object[]{"VZ", 22342}, new Object[]{"AXP", 385432}, new Object[]{"UTX", 23432}}, {new Object[]{"IBM", 18343}, new Object[]{"DIS", 45673}, new Object[]{"AAPL", 23456}}, }, { {new Object[]{"AXP", 34543}, new Object[]{"TRV", 55322}, new Object[]{"NKE", 45642}}, {new Object[]{"CVX", 44332}, new Object[]{"JPM", 12453}, new Object[]{"JNJ", 45433}}, {new Object[]{"MRK", 32346}, new Object[]{"UTX", 46532}, new Object[]{"TRV", 45663}}, } }; this.clientPortfolios = clientPortfolios; } } 

рдШрдЯрдХ рдПрдиреЛрдЯреЗрд╢рди рдЗрд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдШрдЯрдХ рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрде рдПрдиреЛрдЯреЗрд╢рди рдпрд╣ рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдЧ рдХреЛ рдкрде рддрддреНрд╡ "/" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рджреЛ рд╕рдорд░реНрдерд┐рдд рдПрдкреАрдЖрдИ рдХреЙрд▓ рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ / рдЧреНрд░рд╛рд╣рдХ / {рдЧреНрд░рд╛рд╣рдХ-рдЖрдИрдбреА} рдФрд░ рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ / рдЧреНрд░рд╛рд╣рдХ / {рдЧреНрд░рд╛рд╣рдХ-рдЖрдИрдбреА} / рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ / {рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ- рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЖрдИрдбреА}, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╡рд┐рдзрд┐ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкрде ("/") рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рддрд░реАрдХреЗ @GETannotation рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ HTTP GET рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╣рдорд╛рд░рд╛ рддрд░реАрдХрд╛ рдПрдХ рд╕рд░рдгреА рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ Json рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ Json рд╕рд░рдгреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд╕реЗ рдкрде рдкрд░рдо рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

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

 mvn spring-boot:run 

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

 java -jar target\portfolio-0.0.1-SNAPSHOT.jar 

рдЕрдм рд╣рдореЗрдВ рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЛ рдХрдВрд╕реБрд▓ рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдЗрдП рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ, http: // localhost: 8500 / ui / # / dc1 / рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ (рдпрд╛ рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ рддреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ)ред



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

 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> 

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

рдЖрдкрдХреЗ рдкреЛрдо рдореЗрдВ рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jersey</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> 

рдХреЙрдиреНрд╕рд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ, рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ рд╕реЗрд╡рд╛ рдПрдХ рдЦреБрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:



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

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

 INFO 19792 --- [ main] sbcetTomcatEmbeddedServletContainer : Tomcat started on port(s): 57116 (http) 

рдЖрдк рдкреЛрд░реНрдЯ рдХреЛ рд╕реАрдзреЗ рдХрдВрд╕рд▓ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред "рдЧреНрд░рд╛рд╣рдХ-рд╕реЗрд╡рд╛" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдлрд┐рд░ "рд╕реЗрд╡рд╛ 'рдЧреНрд░рд╛рд╣рдХ-рд╕реЗрд╡рд╛' рдЪреЗрдХ рд▓рд┐рдВрдХ" рд▓рд┐рдВрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЬреЛ рд╕реЗрд╡рд╛ рдкреЛрд░реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ 57116ред



рдЕрдиреБрд░реЛрдз http: // localhost: 57116 / рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ / рдЧреНрд░рд╛рд╣рдХ / 1 / рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ / 2 рдФрд░ рдЖрдк json рд╕рд░рдгреА рджреЗрдЦреЗрдВрдЧреЗ [["IBM", 18343], ["DIS", 45673], ["AAPL", 23456]]

рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ microservice рдЦреБрд▓рд╛ рд╣реИ!

рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг рд╕реЗрд╡рд╛


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

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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ:



рдЗрд╕ рд╕рдордп, рд╡реЗрдм, рдХреЙрдиреНрд╕рд▓ рдбрд┐рд╕реНрдХрд╡рд░реА рдФрд░ рдПрдХреНрдЯреНрдпреВрдПрдЯрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:



рдкреНрд░реЛрдЬреЗрдХреНрдЯ "рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг" рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╛рдо рдЫреЛрдбрд╝реЗрдВ рдФрд░ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред

рдЗрд╕ рдмрд╛рд░ рд╣рдо application.properties рдХреЗ рдмрдЬрд╛рдп application.yml рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдирд╛рдо рдФрд░ рдкреЛрд░реНрдЯ рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред

 spring.application.name=pricing server.port=57216 

@EnableDiscoveryClient рдХреЗ рд╕рд╛рде рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВред рд╡рд░реНрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдкреНрд▓рд╕ рдкреИрдХреЗрдЬ рдФрд░ рдЖрдпрд╛рддред

 @SpringBootApplication @EnableDiscoveryClient public class PricingApplication { public static void main(String[] args) { SpringApplication.run(PricingApplication.class, args); } } 

рдлрд┐рд░ рд╣рдо PricingEndpoint рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗрд╡рд╛ рдЦреЛрдЬ (рдкреЛрд░реНрдЯрдлреЛрд▓рд┐рдпреЛ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ) рдФрд░ рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП RestTemplate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ:

 @RestController @RequestMapping("/pricing") public class PricingEndpoint implements InitializingBean { @Autowired DiscoveryClient client; Map<String, Double> pricingMap = new HashMap<>(); RestTemplate restTemplate = new RestTemplate(); @GetMapping("/customer/{customer-id}/portfolio/{portfolio-id}") public List<String> getPricedPortfolio( @PathVariable("customer-id") Integer customerId, @PathVariable("portfolio-id") Integer portfolioId) { List<ServiceInstance> instances = client.getInstances("portfolio-service"); ServiceInstance instance = instances.stream() .findFirst() .orElseThrow(() -> new RuntimeException("not found")); String url = String.format("%s/portfolios/customer/%d/portfolio/%d", instance.getUri(), customerId, portfolioId); // query for the portfolios, returned as an array of List // of size 2, containing a ticker and a position (# of shares) Object[] portfolio = restTemplate.getForObject(url, Object[].class); // Look up the share prices, and return a list of Strings, formatted as // ticker, shares, price, total List<String> collect = Arrays.stream(portfolio).map(position -> { String ticker = ((List<String>) position).get(0); int shares = ((List<Integer>) position).get(1); double price = getPrice(ticker); double total = shares * price; return String.format("%s %d %f %f", ticker, shares, price, total); }).collect(Collectors.toList()); return collect; } private double getPrice(String ticker) { return pricingMap.get(ticker); } @Override public void afterPropertiesSet() throws Exception { pricingMap.put("MMM",201.81); pricingMap.put("AXP",85.11); pricingMap.put("AAPL",161.04); pricingMap.put("BA",236.32); pricingMap.put("CAT",118.02); pricingMap.put("CVX",111.31); pricingMap.put("CSCO",31.7); pricingMap.put("KO",46.00); pricingMap.put("DIS",101.92); pricingMap.put("XOM",78.7); pricingMap.put("GE",24.9); pricingMap.put("GS",217.62); pricingMap.put("HD",155.82); pricingMap.put("IBM",144.29); pricingMap.put("INTC",35.66); pricingMap.put("JNJ",130.8); pricingMap.put("JPM",89.75); pricingMap.put("MCD",159.81); pricingMap.put("MRK",63.89); pricingMap.put("MSFT",73.65); pricingMap.put("NKE",52.78); pricingMap.put("PFE",33.92); pricingMap.put("PG",92.79); pricingMap.put("TRV",117.00); pricingMap.put("UTX",110.12); pricingMap.put("UNH",198.00); pricingMap.put("VZ",47.05); pricingMap.put("V",103.34); pricingMap.put("WMT", 80.05); } } 

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

 @Autowired DiscoveryClient client; 

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

 List<ServiceInstance> instances = client.getInstances("portfolio-service"); ServiceInstance instance = instances.stream().findFirst().orElseThrow(() -> new RuntimeException("not found")); 

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

 String url = String.format("%s/portfolios/customer/%d/portfolio/%d", instance.getUri(), customerId, portfolioId); 

рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ GET рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RestTemplate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

 Object[] portfolio = restTemplate.getForObject(url, Object[].class); 

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

рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ рд░реЗрд╕реНрдЯрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рд▓реЗрдЦрди


рд╣рдордиреЗ рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрд░реНрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рджреБрдирд┐рдпрд╛ рдХреЛ рдЬреНрдЮрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ pom рдореЗрдВ рд╕реНрд╡реИрдЧрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:

 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.7.0</version> </dependency> 

рдлрд┐рд░ рд╣рдореЗрдВ рд╕реНрд╡реИрдЧрд░ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреА рдХреМрди рд╕реА рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЖрдЗрдП рдирдП SwaggerConfig рд╡рд░реНрдЧ рдХреЛ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ Swagger рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╣реИред

 @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.regex("/pricing.*")) .build(); } } 

рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдЗрд╕реЗ @ EnableSwagger2 рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕реНрд╡реИрдЧрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред

рдлрд┐рд░ рд╣рдордиреЗ рдПрдХ Docket рдШрдЯрдХ рдмрдирд╛рдпрд╛ рдЬреЛ Swagger рдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ API рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рд╕реНрд╡реИрдЧрд░ рдХреЛ "рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг" рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдкрде рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдкрде рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ:

 .apis(RequestHandlerSelectors.basePackage("com.restms.demo")) .paths(PathSelectors.any()) 

рдореВрд▓реНрдп рдорд╛рдЗрдХреНрд░реЛрд╕реИрд╕реНрдЯ рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ рдФрд░ http: // localhost: 57216 / swagger-ui.html рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ



рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдкреНрд░рдкрддреНрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрд╢рди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, "рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ!" рдФрд░ рдЙрддреНрддрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ:



рдЖрдк рдЕрдкрдиреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реНрд╡реИрдЧрд░ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдХрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░рдВрдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, @ApiOperation рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореМрдЬреВрджрд╛ PricingImpl.getPricedPortfolio рд╡рд┐рдзрд┐ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 @ApiOperation(value = "Retrieves a fully priced portfolio", notes = "Retrieves fully priced portfolio given customer id and portfolio id") @GetMapping("/customer/{customer-id}/portfolio/{portfolio-id}") public List<String> getPricedPortfolio(@PathVariable("customer-id") Integer customerId, @PathVariable("portfolio-id") Integer portfolioId) 

рдирдП рдЕрджреНрдпрддрди рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рд╕реНрд╡реИрдЧрд░-рдпреВрдЖрдИ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:



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

рд╣рдорд╛рд░реЗ рдкрд╛рдареНрдпрдХреНрд░рдо "рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдбреЗрд╡рд▓рдкрд░" рдХреЗ рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛рддрд╛ рдпреВрд░реА рдбреНрд╡реЛрд░рдЬрд╝реЗрддреНрд╕реНрдХреА рдЖрдкрдХреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХреЗ рдХрд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрддрд╛рдПрдВрдЧреЗ:


рдореВрд▓ рд▓реЗрдЦ

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


All Articles