рдПрдХ RQ рд╕реЗрд╡рд╛ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ MQ рдХрддрд╛рд░ рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХрд░рдирд╛

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!

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

рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ IBM WebSphere Liberty Server рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП JEE7 рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рд╕реЗрд╡рд╛ рдХреЛрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛, рдФрд░ IBM MQ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдЕрдиреНрдп рд╕рдорд╛рди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЕрд░реНрдерд╛рддред рдХреЛрдИ рднреА JMS API рдкреНрд░рджрд╛рддрд╛ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреЛрдИ JEE рд╕рд░реНрд╡рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Apache Tomcat) рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдмрдпрд╛рди


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

рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рд╕рдорд╛рдзрд╛рди рдореЗрдВ рддреАрди рдШрдЯрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  1. REST рд╕реЗрд╡рд╛ - рдЬрд┐рд╕рдХрд╛ рдХрд╛рд░реНрдп рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдлрд╝рд╛рдЗрд▓ (рдпрд╛ рдЕрдиреБрд░реЛрдз) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред
  2. рдПрдордХреНрдпреВ - рд╡рд┐рднрд┐рдиреНрди рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмреАрдЪ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
  3. рдЖрд╡реЗрджрди - рдПрдХ рдЖрд╡реЗрджрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдФрд░ рдЕрдиреБрд░реЛрдз рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

рдЫрд╡рд┐

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ REST рд╕реЗрд╡рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдПрдХ рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
  • рдкреНрд░рд╛рдкреНрдд рдлрд╝рд╛рдЗрд▓ рдХреЛ MQ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ MQ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ред

рд╕рдорд╛рдзрд╛рди рд╡рд┐рдзрд┐


рдкреНрд░реЗрд╖рд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмрдбрд╝реЗ рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рд░рдг, рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░реИрдо рдореЗрдВ рд░рдЦрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдордХреНрдпреВ рдкрдХреНрд╖ рдкрд░ рднреА рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ - рдПрдордХреНрдпреВ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЖрдХрд╛рд░ 100 рдПрдордмреА рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореЗрд░рд╛ рдирд┐рд░реНрдгрдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдЧрд╛:

  • рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдПрдордХреНрдпреВ рдХрддрд╛рд░ рдореЗрдВ рд╕рд╣реЗрдЬрдирд╛, рд╕рдВрдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдХрддрд╛рд░ рдореЗрдВ, MQ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЫреЛрдЯреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред

рд░реЗрдЦрд╛рдВрдХрди, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдУрд░ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдЖрд╡рдВрдЯрди, REST рд╕реЗрд╡рд╛ рдФрд░ MQ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЫрд╡рд┐

рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдкрд░, рдлрд╝рд╛рдЗрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, REST рд╕реЗрд╡рд╛ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рднрд╛рдЧ рд░реИрдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдПрдордХреНрдпреВ рдкрдХреНрд╖ рдкрд░, рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдЖрд░рдИрдПрд╕ рд╕реЗрд╡рд╛ рдХрд╛ рд╡рд┐рдХрд╛рд╕


рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдкрджреНрдзрддрд┐ рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдбреЗрдореЛ рд░реАрд╕реНрдЯ рд╕реЗрд╡рд╛ рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

  • рдЕрдкрд▓реЛрдб - рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ MQ рдХрддрд╛рд░ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕рдореВрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдмреЗрд╕ 64 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ) рджреЗрддрд╛ рд╣реИред
  • рдбрд╛рдЙрдирд▓реЛрдб - рдЧреНрд░рд╛рд╣рдХ рд╕реЗ рд╕рдВрджреЗрд╢ рд╕рдореВрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдмреЗрд╕ 64 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ) рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдордХреНрдпреВ рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдлрд╝рд╛рдЗрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ (рдЕрдкрд▓реЛрдб)


рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдп рдЖрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреА рдзрд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдордХреНрдпреВ рдХрддрд╛рд░ рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реИред

рдЖрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдПрдХ рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ com.ibm.websphere.jaxrs20.multipart.IMultipartBody рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреА рд╣реИ, рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреА рдзрд╛рд░рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ

@PUT @Path("upload") public Response upload(IMultipartBody body) { ... IAttachment attachment = body.getAttachment("file"); InputStream inputStream = attachment.getDataHandler().getInputStream(); ... } 

рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (IMultipartBody) com.ibm.websphere.appserver.api.jaxrs20_1.0.21.jar JAR рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, IBM рд▓рд┐рдмрд░реНрдЯреА рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ: < WLP_INSTALLATION_PATH > / dev / api / ibmред

рдиреЛрдЯ:

  • WLP_INSTALLATION_PATH - рд╡реЗрдмрд╕рд░реНрдлрд╝ рд▓рд┐рдмрд░реНрдЯреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкрдеред
  • рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ "рдлрд╝рд╛рдЗрд▓" рдирд╛рдо рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдЧрд╛ред
  • рдпрджрд┐ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк Apache CXF рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

MQ рдореЗрдВ рдХрд┐рд╕реА рдлрд╛рдЗрд▓ рдХреЛ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреА рд╕реНрдЯреНрд░реАрдо


рд╡рд┐рдзрд┐ рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рд╕реНрдЯреНрд░реАрдо, MQ рдХрддрд╛рд░ рдХрд╛ рдирд╛рдо рдЬрд╣рд╛рдВ рдлрд╝рд╛рдЗрд▓ рд▓рд┐рдЦреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рдВрджреЗрд╢ рд╕рдореВрд╣ рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдореВрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдкрдХреНрд╖ рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрд┐рддрд╛ org.apache.commons.lang3.RandomStringUtils рдХреЗ рд╕рд╛рде:

 String groupId = RandomStringUtils.randomAscii(24); 

MQ рдореЗрдВ рдЗрдирдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдг рд╣реИрдВ:

  1. рдПрдордХреНрдпреВ рдХрдиреЗрдХреНрд╢рди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдгред
  2. рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрдврд╝рдиреЗ рддрдХ рдЖрдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЪрдХреНрд░реАрдп рдкрдврд╝рдирд╛:
    1. рдлрд╝рд╛рдЗрд▓ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ MQ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
    2. рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХрд╛ рдЕрдкрдирд╛ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░ (рд╕рдВрдкрддреНрддрд┐ "JMSXGroupSeq") рд╣реИред
    3. рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рднреА рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рд╕рдореВрд╣ рдорд╛рди рд╕рдорд╛рди рд╣реИ (рд╕рдВрдкрддреНрддрд┐ "JMSXGroupID")ред
    4. рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдореЗрдВ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрджреЗрд╢ рдЕрдВрддрд┐рдо рд╣реИ (рд╕рдВрдкрддреНрддрд┐ "JMS_IBM_Last_Msg_In_Group")ред
    5. SEGMENT_SIZE рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рд╕реЗрд╡рд╛рд░рдд рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 1Mbред

 public void write(InputStream inputStream, String queueName, String groupId) throws IOException, JMSException { try ( Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(); MessageProducer producer = session.createProducer(session.createQueue(queueName)); ) { byte[] buffer = new byte[SEGMENT_SIZE]; BytesMessage message = null; for(int readBytesSize = 1, sequenceNumber = 1; readBytesSize > 0; sequenceNumber++) { readBytesSize = inputStream.read(buffer); if (message != null) { if (readBytesSize < 1) { message.setBooleanProperty("JMS_IBM_Last_Msg_In_Group", true); } producer.send(message); } if (readBytesSize > 0) { message = session.createBytesMessage(); message.setStringProperty("JMSXGroupID", groupId); message.setIntProperty("JMSXGroupSeq", sequenceNumber); if (readBytesSize == SEGMENT_SIZE) { message.writeBytes(buffer); } else { message.writeBytes(Arrays.copyOf(buffer, readBytesSize)); } } } } } 

рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрдиреЗ рдХреА рд╡рд┐рдзрд┐ (рдбрд╛рдЙрдирд▓реЛрдб)


рд╡рд┐рдзрд┐ рдмреЗрд╕ 64 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдПрдордХреНрдпреВ рдХрддрд╛рд░ рд╕реЗ рд╕рдВрджреЗрд╢ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред

рд╕рдВрджреЗрд╢ рд╕рдореВрд╣ рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


рд╡рд┐рдзрд┐ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕рдореВрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

 @PUT @Path("download") public Response download(@QueryParam("groupId") String groupId) { ... } 

рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ


рдПрдордХреНрдпреВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рдлрд╛рдЗрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ, javax.ws.rs.core.StreamingOutput рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВ:

 public class MQStreamingOutput implements StreamingOutput { private String groupId; private String queueName; public MQStreamingOutput(String groupId, String queueName) { super(); this.groupId = groupId; this.queueName = queueName; } @Override public void write(OutputStream outputStream) throws IOException, WebApplicationException { try { new MQWorker().read(outputStream, queueName, groupId); } catch(NamingException | JMSException e) { e.printStackTrace(); new IOException(e); } finally { outputStream.flush(); outputStream.close(); } } } 

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

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

 @GET @Path("download") public Response download(@QueryParam("groupId") String groupId) { ResponseBuilder responseBuilder = null; try { MQStreamingOutput streamingOutput = new MQStreamingOutput(new String(Utils.decodeBase64(groupId)), Utils.QUEUE_NAME); responseBuilder = Response.ok(streamingOutput); } catch(Exception e) { e.printStackTrace(); responseBuilder.status(Status.INTERNAL_SERVER_ERROR).entity(e.getMessage()); } return responseBuilder.build(); } 

MQ рд╕реЗ рдХрд┐рд╕реА рдлрд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рд╕реНрдЯреНрд░реАрдо


MQ рд╕реЗ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕реНрдЯреНрд░реАрдо рдкрд░ рд╕рдВрджреЗрд╢ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:

  1. рдПрдордХреНрдпреВ рдХрдиреЗрдХреНрд╢рди рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдгред
  2. рд╕рдореВрд╣ рдореЗрдВ рд╕рдорд╛рдкреНрддрд┐ рдХреЗ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рдкрдврд╝рдиреЗ рддрдХ MQ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЪрдХреНрд░реАрдп рд░реАрдбрд┐рдВрдЧ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИ (рд╕рдВрдкрддреНрддрд┐ "JMS_IBM_Last_Msg_In_Group"):
    1. рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЛ рдХрддрд╛рд░ рд╕реЗ рдкрдврд╝реЗ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ (messageSelector) рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕рдореВрд╣ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рд╕рдореВрд╣ рдореЗрдВ рд╕рдВрджреЗрд╢ рдХреНрд░рдорд╛рдВрдХ рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
    2. рдкрдарди рд╕рдВрджреЗрд╢ рдХреА рд╕рд╛рдордЧреНрд░реА рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИред


 public void read(OutputStream outputStream, String queueName, String groupId) throws IOException, JMSException { try( Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(); ) { connection.start(); Queue queue = session.createQueue(queueName); int sequenceNumber = 1; for(boolean isMessageExist = true; isMessageExist == true; ) { String messageSelector = "JMSXGroupID='" + groupId.replaceAll("'", "''") + "' AND JMSXGroupSeq=" + sequenceNumber++; try( MessageConsumer consumer = session.createConsumer(queue, messageSelector); ) { BytesMessage message = (BytesMessage) consumer.receiveNoWait(); if (message == null) { isMessageExist = false; } else { byte[] buffer = new byte[(int) message.getBodyLength()]; message.readBytes(buffer); outputStream.write(buffer); if (message.getBooleanProperty("JMS_IBM_Last_Msg_In_Group")) { isMessageExist = false; } } } } } } 

рдЕрдиреНрдп рд╕реЗрд╡рд╛ рдХреЙрд▓


рд╕реЗрд╡рд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд░реНрд▓ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред

рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ


 curl -X PUT -F file=@<__> http://localhost:9080/Demo/rest/service/upload 

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдПрдХ рдмреЗрд╕ 64 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕рдореВрд╣ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВрдЧреЗред

рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛


 curl -X GET http://localhost:9080/Demo/rest/service/download?groupId=<base64____> -o <_____> 

рдирд┐рд╖реНрдХрд░реНрд╖


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

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдордЧреНрд░реА


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

REST рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп Apache CXF рд╣реИ ред

рдХрд┐рд╕реА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП REST рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП StreamingOutput рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХ рд▓рд┐рдВрдХ рд╣реИ ред

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


All Articles