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

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

Microservice рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЖрд╡реЗрджрди рдкреВрд░реЗ рдореЗрдВ рдирд╣реАрдВ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рднрд╛рдЧреЛрдВ рдореЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗрд╡рд╛ "рдЯреНрд╡рд┐рдЪ" рдХреЛ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рд░, рд╣рдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдФрд░ рдХрдВрдЯреЗрдирд░реАрдХрд░рдг рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред
рдЧреЛрд▓рдВрдЧ рдХреНрдпреЛрдВ?
рд▓рдЧрднрдЧ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдЦрд┐рд░рдХрд╛рд░, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлрд╝реНрдЯ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рди рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рдЙрдкрдХрд░рдгред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рднрд╛рд╖рд╛рдПрдВ рдмреЗрд╣рддрд░ рдЕрдиреБрдХреВрд▓ рд╣реИрдВ рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд░реНрдерди рд╣реИред рдорд╣рд╛рди рд╕рдорд░реНрдерди рд╡рд╛рд▓реА рдПрдХ рднрд╛рд╖рд╛ рд╣реИ рдЧреЛрд▓рдВрдЧред
рдкреНрд░реЛрдЯреЛрдмреБрдлрд╝ / gRPC рд╕реЗ рдорд┐рд▓реЛ
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрд╕ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдб рдЖрдзрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рд╕реЗ рдЬреБрдбрд╝реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдВрдЪрд╛рд░ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдореЛрдиреЛрд▓рд┐рде рд╣реИ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рд╕реЗ рд╕реАрдзреЗ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдЪрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╛рд░рдВрдкрд░рд┐рдХ REST рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ JSON рдпрд╛ XML рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЗрд╕рдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдбреЗрдЯрд╛ рдПрдирдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрдХреНрд╖ рдкрд░ рдбреАрдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдпрд╣ рдУрд╡рд░рд╣реЗрдб рд╣реИ рдФрд░ рдХреЛрдб рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред
рдПрдХ рдЙрдкрд╛рдп рд╣реИ! рдпрд╣ gRPC рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ - рдПрдХ рд╣рд▓реНрдХрд╛, рдмрд╛рдЗрдирд░реА-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬреЛ HTTP рд╣реЗрдбрд░ рдХреЗ рд╕рдВрдЪрд░рдг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╣рдореЗрдВ рдХреБрдЫ рдмрд╛рдЗрдЯреНрд╕ рдмрдЪрд╛рдПрдЧрд╛ред рднрд╡рд┐рд╖реНрдп рдХреЗ HTTP2 рдореЗрдВ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдбреЗрдЯрд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рднреА рдЕрд░реНрде рд╣реИ, рдЬреЛ рдлрд┐рд░ рд╕реЗ рдЬреАрдЖрд░рдкреАрд╕реА рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмреЛрд▓рддрд╛ рд╣реИред HTTP2 рджреНрд╡рд┐рджрд┐рд╢ рд╕рдВрдЪрд╛рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рд╣реИ!
рдЬреАрдЖрд░рдкреАрд╕реА рдЖрдкрдХреЛ рдПрдХ рдЕрдиреБрдХреВрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдпрд╣ рд╣реИ> рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ ред
рдЕрднреНрдпрд╛рд╕
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ /project/consigment.protoред
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ рдкреНрд░рд▓реЗрдЦрди
consigment.proto//consigment.proto syntax = "proto3"; package go.micro.srv.consignment; service ShippingService { rpc CreateConsignment(Consignment) returns (Response) {} } message Consignment { string id = 1; string description = 2; int32 weight = 3; repeated Container containers = 4; string vessel_id = 5; } message Container { string id = 1; string customer_id = 2; string origin = 3; string user_id = 4; } message Response { bool created = 1; Consignment consignment = 2; }
рдпрд╣ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд╣ рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдЖрдк рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: рд╕реЗрд╡рд╛ рд╢рд┐рдкрд┐рдВрдЧ рд╕реЗрд╡рд╛, рдлрд┐рд░ рд╣рдо рдЕрдкрдиреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ рдПрдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ, рдФрд░ рд╣рдо рдХрд╕реНрдЯрдо рдкреНрд░рдХрд╛рд░ (рдЧреЛрд▓рдВрдЧ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рдорд╛рди) рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдХрдВрдЯреЗрдирд░ рдХреЛ рдмреИрдЪ рдореЗрдВ рдШреЛрдВрд╕рд▓рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рд╕рдВрдХрд▓рдХ рдФрд░ рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░реЗрдВ:
$ go get -u google.golang.org/grpc $ go get -u github.com/golang/protobuf/protoc-gen-go $ sudo apt install protobuf-compiler $ mkdir consignment && cd consignment $ protoc -I=. --go_out=plugins=grpc:. consignment.proto
рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рдлрд╛рдЗрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
consignment.pb.go
рдЕрдЧрд░, рддреЛ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖред рддрд░реНрдХреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ-рдореИрдВ рд╡рд╣ рдкрде рд╣реИ рдЬрд╣рд╛рдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реИ, --go_out рдЬрд╣рд╛рдВ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рд╣рдореЗрд╢рд╛ рдорджрдж рд╣реИ
$ protoc -h
рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ gRPC / protobuf рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреЛрдб рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ protobuf рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХреЗрдВред
рд╣рдо main.go рд▓рд┐рдЦреЗрдВрдЧреЗ
main.go package seaport import ( "log" "net"
рдХреГрдкрдпрд╛ рдХреЛрдб рдореЗрдВ рдЫреЛрдбрд╝реА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдкрдврд╝реЗрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣рд╛рдВ рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрд░реНрдХ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ gRPC рддрд░реАрдХреЗ рдЙрддреНрдкрдиреНрди рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВ, рдкреЛрд░реНрдЯ 50051 рдкрд░ рдПрдХ рдирдпрд╛ gRPC рд╕рд░реНрд╡рд░ рдмрдирд╛рддреЗ рд╣реИрдВред рдЕрдм рд╣рдорд╛рд░реА gRPC рд╕реЗрд╡рд╛ рд╡рд╣рд╛рдВ рд░рд╣реЗрдЧреАред
рдЖрдк рдЗрд╕реЗ $ go рд░рди main.go рдХреЗ рд╕рд╛рде рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ ... рддреЛ, рдЪрд▓рд┐рдП рдЗрд╕реЗ рдПрдХреНрд╢рди рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред
рдЖрдЗрдП рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдПрдВ рдЬреЛ рдПрдХ JSON рдлрд╝рд╛рдЗрд▓ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реА gRPC рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред
рд░реВрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ $ mkdir рдХрдВрд╕рд╛рдЗрдирдореЗрдВрдЯ-рдХреНрд▓реА рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ cli.go рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
cli.go package main import ( "encoding/json" "io/ioutil" "log" "os" pbf "seaport/consignment" "golang.org/x/net/context" "google.golang.org/grpc" ) const ( address = "localhost:50051" defaultFilename = "consignment.json" )
рдЕрдм рдПрдХ рдмреИрдЪ (рдХрдВрд╕рд╛рдЗрдирдореЗрдВрдЯ-рдХреНрд▓реА / рдХрдВрд╕рд╛рдЗрдирдореЗрдВрдЯ.рдЬреЙрди) рдмрдирд╛рдПрдВ:
{ "description": " ", "weight": 100, "containers": [ { "customer_id": "_001", "user_id": "_001", "origin": " " } ], "vessel_id": "_001" }
рдЕрдм, рдпрджрд┐ рдЖрдк рдмрдВрджрд░рдЧрд╛рд╣ рдкреИрдХреЗрдЬ рд╕реЗ $ go run main.go рдЪрд▓рд╛рддреЗ рд╣реИрдВ , рдФрд░ рдлрд┐рд░ $ go run cli.go рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЯрд░реНрдорд┐рдирд▓ рдкреИрдирд▓ рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ ред рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ "рдмрдирд╛рдпрд╛ рдЧрдпрд╛: рд╕рддреНрдп" рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд▓реЗрдХрд┐рди рд╣рдо рдХреИрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛? рдЖрдЗрдП GetConsignments рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдмрдирд╛рдП рдЧрдП рд╕рднреА рдмреИрдЪреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХреЗрдВред
рдЗрд╕рд▓рд┐рдП, рдпрд╣рд╛рдБ рд╣рдордиреЗ GetConsignments рдирд╛рдордХ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдкрд░ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рдмрдирд╛рдпрд╛, рд╣рдордиреЗ рдПрдХ рдирдпрд╛ GetRequest рднреА рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдЕрднреА рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рдЕрдкрдиреЗ рдЙрддреНрддрд░ рд╕рдВрджреЗрд╢ рдореЗрдВ рднреЗрдЬреЗ рдЧрдП рдмреИрдЪреЛрдВ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рднреА рдЬреЛрдбрд╝рд╛ред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣рд╛рдБ рдЯрд╛рдЗрдк рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдХреАрд╡рд░реНрдб рд╣реЛрддрд╛ рд╣реИред рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдерд╛, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджреА рдордд рдХрд░реЛ, рд╣рдорд╛рд░реЗ рдЬреАрдЖрд░рдкреАрд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░реЛрдЯреЛрдмреЛрдлрд╝ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣рдорд╛рд░реА рдкреНрд░реЛрдЯреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рд╣рдордиреЗ рдЕрдкрдиреА рдирдИ GetConsignments рд╡рд┐рдзрд┐ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ рдЦреЗрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк $ go рд░рди main.go рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ , рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрдЗрдП рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ cli рдЯреВрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рд╣рдорд╛рд░реА рдкрд╛рд░реНрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
cli.go package main import ( "encoding/json" "io/ioutil" "log" "os" pbf "seaport/consignment" "golang.org/x/net/context" "google.golang.org/grpc" ) const ( address = "localhost:50051" defaultFilename = "consignment.json" )
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ cli.go рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ $ go run cli.go рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБ ред рдХреНрд▓рд╛рдЗрдВрдЯ CreateConsignment рдЪрд▓рд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ GetConsignments рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдФрд░ рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрддреНрддрд░ рд╕реВрдЪреА рдореЗрдВ рдкрд╛рд░реНрдЯреА рдХреА рд░рдЪрдирд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░реЛрдЯреНрд░реВрдлрд╝ рдФрд░ рдЬреАрдЖрд░рдкреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд╛ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИред
рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЧреЛ-рдорд╛рдЗрдХреНрд░реЛ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛, рдЬреЛ рдЬреАрдЖрд░рдкреАрд╕реА-рдЖрдзрд╛рд░рд┐рдд рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЖрдзрд╛рд░ рд╣реИред рд╣рдо рдЕрдкрдиреА рджреВрд╕рд░реА рд╕реЗрд╡рд╛ рднреА рдмрдирд╛рдПрдВрдЧреЗред рд▓реЗрдЦреЛрдВ рдХреА рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдбреЛрдХрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдХрд╛рдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред