├ШMQ рдФрд░ JZMQ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛

рдЕрднрд┐рд╡рд╛рджрди, рд╣рдо рд╕рдорд╛рди рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕реА рдХрдВрдкрдиреА рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдЙрддреНрдкрд╛рдж рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЙрдирдХреЗ рдкреНрд░рд╛рд░реВрдк рдФрд░ рднрдВрдбрд╛рд░рдг рдкрджреНрдзрддрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ - ArkStore , рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рд╣рдо рдЙрд╕ рдЕрдиреБрднрд╡ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рдЧрднрдЧ рджреЛ-рд╡рд░реНрд╖реАрдп рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдПрдХ IO рдкрд░рдд рдФрд░ (MQ (рдпрд╛ ZeroMQ) рдирд╛рдордХ рдЙрддреНрдкрд╛рдж рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдореИрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ tryMQ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпреЛрдВ QMQ

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

рдЕрдВрдд рдореЗрдВ, рд╣рдордиреЗ рд╕рдВрджреЗрд╢ рджрд▓рд╛рд▓реЛрдВ рдХреА рдУрд░ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред ActiveMQ , RabbitMQ рдФрд░ QMQ ред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рднреА рджрд▓рд╛рд▓реЛрдВ рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╣рдо .MQ рдкрд░ рдмрд╕ рдЧрдПред ActiveMQ рдмрд╣реБрдд рднрд╛рд░реА рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдФрд░ RabbitMQ рдиреЗ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдХреЛ рд╢реБрд░реВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ (рдПрдХ рд╕реНрдкрд╖реНрдЯ рдиреЗрддрд╛ рдХреЗ рдмрд┐рдирд╛) рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ред

├ШMQ рддреАрди рдмреБрдирд┐рдпрд╛рджреА рдбреЗрдЯрд╛ рдЕрдВрддрд░рдг рдкреИрдЯрд░реНрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдпреЗ рд╣реИрдВ:

рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рдЕрджреНрднреБрдд рдЧрд╛рдЗрдб рд╕реЗ рдЗрди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдФрд░ theseMQ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ (рдЕрдиреБрд░реЛрдз-рдЙрддреНрддрд░) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

рд╣рдо ├ШMQ рдФрд░ JZMQ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ

рдХреЛрдб рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ codeMQ рдФрд░ Java рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд▓рд┐рдирдХреНрд╕

рд╕реЗрдВрдЯреЛрд╕ рдХреЗ рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА (рдпрд╣ рдЕрдиреНрдп * рдирд┐рдХреНрд╕ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ:
yum install libtool autoconf automake gcc-c++ make e2fsprogs 

рд╣рдо рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕рд╛рдЗрдЯ рд╕реЗ .MQ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓реЗ рд▓реЗрдВрдЧреЗ рдФрд░ рдЕрдирдЬрд╝рд┐рдк рдХрд░реЗрдВрдЧреЗ (3.2.4 рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп)ред
 wget http://download.zeromq.org/zeromq-3.2.4.tar.gz tar -xzvf zeromq-3.2.4.tar.gz cd zeromq-3.2.4 

рд╣рдо QMQ рдПрдХрддреНрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ / usr / рд▓реЛрдХрд▓ / рд▓реЗрдмрд░ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реЛрдВрдЧреЗ, рд╣рдореЗрдВ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
 ./configure make sudo make install sudo ldconfig 

рд╣рдо JMQ рдЗрдХрдЯреНрдареЗ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ JZMQ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬреАрдЖрдИрдЯреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рдорд╛рд╕реНрдЯрд░ рдпрд╛ рдЯреИрдЧ, рд▓реЗрдЦрди рдХреЗ рд╕рдордп рдЕрдВрддрд┐рдо рдЯреИрдЧ 2.2.2) рд╕реЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкрдВрдк рдХрд░рддреЗ рд╣реИрдВред
 wget https://github.com/zeromq/jzmq/archive/v2.2.2.zip unzip jzmq-2.2.2.zip cd jzmq-2.2.2 ./autogen.sh ./configure make sudo make install sudo ldconfig 

рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА / usr / lib / рд╕реНрдерд╛рдиреАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реЛрдВрдЧреЗред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрдпреЛрдВ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ java.library.path рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди -Djava.library.path = "/ usr / lib / рд╕реНрдерд╛рдиреАрдп" рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЗрд╕реЗ рд╕реАрдзреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо java.library.path рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 java -XshowSettings:properties 

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣реИ:
 java.library.path = /usr/java/packages/lib/amd64 /usr/lib64 /lib64 /lib /usr/lib 

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

рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░рд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд╣рд╛рдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдмрд╕ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:
 whereis libzmq whereis libjzmq 

рд╡рд┐рдВрдбреЛрдЬ

Libzmq рдХреЗ рд▓рд┐рдП рдПрдХрддреНрд░рд┐рдд dll рдлрд╛рдЗрд▓реЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рдЖрдк рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП JZMQ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╛рдЗрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореИрдВрдиреЗ CMAKE рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдореБрдЭреЗ Visual Studio 2013 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ libzmq рдФрд░ jzmq рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рд╕рд╛рде рд╣реА, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ VVM (32 рдпрд╛ 64 рдмрд┐рдЯ) рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдпрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛрдВ,

рдпрджрд┐ libzmq.dll рдФрд░ jzmq.dll рдХреЛ PATH рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ JVM рдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХрд╛рд░реНрдпрдХреНрд░рдо

рд╡рд╛рд╣, рд╣рдо рдЕрдВрдд рдореЗрдВ рд╣рдорд╛рд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ andMQ рдФрд░ JZMQ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ! рдЗрд╕реЗ рдЕрдорд▓ рдореЗрдВ рд▓рд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдореИрдиреБрдЕрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╕реБрдзрд╛рд░реЗрдВрдЧреЗред

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

"рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ" тДв рдбреЗрдЯрд╛ рдХреА рдПрдХ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдВред
 dd if=/dev/urandom of=testdata bs=1M count=1024 

рдЖрдЗрдП рдорд╛рдкреЗрдВ рдХрд┐ рдУрдПрд╕ рдХреЛ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдореЗрдВ рдХрд┐рддрдирд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдпреЗ рдЖрдВрдХрдбрд╝реЗ рдХрд╛рдлреА рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рддреБрд▓рдирд╛рддреНрдордХ рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ред
 echo 3 > /proc/sys/vm/drop_caches time cp testdata testdata2 real 0m7.745s user 0m0.011s sys 0m1.223s 

рдХреЛрдб рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреЗ рд╣реИрдВред рдЧреНрд░рд╛рд╣рдХ:
 package com.coldsnipe.example; import org.zeromq.ZFrame; import org.zeromq.ZMQ; public class ZMQClient implements Runnable { //      "" private static final int PIPELINE = 10; //  1  , 250. private static final int CHUNK_SIZE = 250000; private final ZMQ.Context zmqContext; public ZMQClient(ZMQ.Context zmqContext) { this.zmqContext = zmqContext; } @Override public void run() { //  ZMQ.Socket,     DEALER socket try (ZMQ.Socket socket = zmqContext.socket(ZMQ.DEALER)) { //            //  ,   1      (drop)   socket.setLinger(1000); //     TCP  socket.connect("tcp://127.0.0.1:6000"); //  ,  Chunks     int credit = PIPELINE; //    long total = 0; //    (Chunks) int chunks = 0; //      long offset = 0; while (!Thread.currentThread().isInterrupted()) { //     "",     //   while (credit > 0) { socket.sendMore("fetch"); socket.sendMore(Long.toString(offset)); socket.send(Integer.toString(CHUNK_SIZE)); offset += CHUNK_SIZE; credit--; } //       ZFrame zFrame = ZFrame.recvFrame(socket); //   ,   if (zFrame == null) { break; } chunks++; credit++; int size = zFrame.getData().length; total += size; zFrame.destroy(); //         //       if (size < CHUNK_SIZE) { break; } } System.out.format("%d chunks received, %d bytes %n", chunks, total); } } } 

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

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

 package com.coldsnipe.example; import org.zeromq.ZFrame; import org.zeromq.ZMQ; import java.io.File; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.Path; public class ZMQServer implements Runnable { private final ZMQ.Context zmqContext; //         private final Path filePath; public ZMQServer(ZMQ.Context zmqContext, Path filePath) { this.zmqContext = zmqContext; this.filePath = filePath; } @Override public void run() { try { File file = filePath.toFile(); if (!file.exists()) { throw new RuntimeException("File does not exists: " + filePath); } //    , Router   identity , //         try (FileChannel fileChannel = FileChannel.open(filePath)) { try (ZMQ.Socket socket = zmqContext.socket(ZMQ.ROUTER)) { //      localhost  6000  socket.bind("tcp://*:6000"); socket.setLinger(1000); while (!Thread.currentThread().isInterrupted()) { //   -  identity frame ZFrame identity = ZFrame.recvFrame(socket); assert identity != null; //    String command = socket.recvStr(); if (command.equals("fetch")) { //     fetch,   offset     String offsetString = socket.recvStr(); long offset = Long.parseLong(offsetString); String chunkSizeString = socket.recvStr(); int chunkSize = Integer.parseInt(chunkSizeString); int currentChunkSize = chunkSize; //   offset +       //     ,      offset    if (file.length() < (offset + chunkSize)) { currentChunkSize = (int) (file.length() - offset); } if (currentChunkSize > 0) { ByteBuffer byteBuffer = ByteBuffer.allocate(currentChunkSize); fileChannel.read(byteBuffer, offset); byteBuffer.flip(); byte[] bytes = new byte[currentChunkSize]; byteBuffer.get(bytes); //     ZFrame frameToSend = new ZFrame(bytes); //        identity // ,     identity.send(socket, ZFrame.MORE); frameToSend.send(socket, 0); } } } } } } catch (IOException e) { throw new RuntimeException(e); } } } 

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

 package com.coldsnipe.example; import org.junit.Test; import org.zeromq.ZMQ; import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; public class ZMQExampleTest { @Test public void testDataExchange() throws Exception { //  ZMQ.Context,    1!      //          ZMQ.Context zmqContext = ZMQ.context(1); //     final URL fileUrl = ZMQExampleTest.class.getClassLoader().getResource("testdata"); assert fileUrl != null; Path filePath = Paths.get(fileUrl.toURI()); //        ,     //       long startTime = System.nanoTime(); Thread clientThread = new Thread(new ZMQClient(zmqContext)); Thread serverThread = new Thread(new ZMQServer(zmqContext, filePath)); clientThread.start(); serverThread.start(); clientThread.join(); long estimatedTime = System.nanoTime() - startTime; float timeForTest = estimatedTime / 1000000000F; System.out.format("Elapsed time: %fs%n", timeForTest); //    ,     //          . zmqContext.term(); } } 

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

рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗрдВред
 4295 chunks received, 1073741824 bytes Elapsed time: 1.429522s 

рдПрдХ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдкрдврд╝рдиреЗ рдореЗрдВ 1.42 рд╕реЗрдХрдВрдб рд▓рдЧреЗред рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХреЗрддрдХ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рд╕реНрдкреНрд░реЗ IO рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, QMQ 30-40% рддреЗрдЬреА рд╕реЗ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ IO рдкрд░ рд▓реЛрдб 100% (рд╕реНрдкреНрд░реЗ 85-90) рдХреЗ рдХрд░реАрдм рд╣реИ, CPU рд▓реЛрдб рд▓рдЧрднрдЧ рдПрдХ рддрд┐рд╣рд╛рдИ рдХрдо рд╣реИ ред

рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╕реБрдзрд╛рд░

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

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рд╣реИрдВрдбрд▓рд░ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ
 else if(command.equals("get")) { // ID  String id = socket.recvStr(); //       BigInteger identityString = new BigInteger(identity.getData()); DataBlob dataBlob = blobMap.get(identityString); if (dataBlob!= null){ //      ,   DataBlob dataBlob.closeSource(); blobMap.remove(identityString); } //     DataBlob dataBlob = dataProvider.getBlob(id); if (dataBlob == null) { log.error("Received wrong get call on server socket, ID [{}]", id); } else { //   ,        DataHeader dataHeader = new DataHeader(id, dataBlob.getSize()); byte[] bytesToSend = FrameHeaderEncoder.encode(dataHeader); ZFrame frameToSend = new ZFrame(bytesToSend); //   DataBlob   blobMap.put(new BigInteger(identity.getData()), dataBlob); //    identity.send(socket, ZFrame.MORE); frameToSend.send(socket, 0); } } else if (command.equals("end")){ BigInteger identityString = new BigInteger(identity.getData()); //  DataBlob    DataBlob dataBlob = blobMap.remove(identityString); if (dataBlob != null) { dataBlob.closeSource(); } } 

рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ред
 public interface DataProvider { public DataBlob getBlob(String dataId); } public abstract class DataBlob { private final long size; private final String dataId; protected DataBlob(long size, String dataId) { this.size = size; this.dataId= dataId; } public abstract byte[] getData(long position, int length); public abstract void closeSource(); public long getSize() { return size; } public String getDataId() { return getDataId; } } 

DataProvider рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╡рд░реНрдЧ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ, GetBlob рд╡рд┐рдзрд┐ рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ DataBlob рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИред

рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП DataBlob рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ:
 public class FileDataBlob extends DataBlob { private final FileChannel fileChannel; public FileDataBlob(long size, String dataId, Path filePath) { super(size, dataId); try { this.fileChannel = FileChannel.open(filePath); } catch (IOException e) { throw new DataBlobException(e); } } @Override public byte[] getData(long position, int length) { ByteBuffer byteBuffer = ByteBuffer.allocate(length); try { fileChannel.read(byteBuffer, position); byteBuffer.flip(); byte[] bytes = new byte[length]; byteBuffer.get(bytes); return bytes; } catch (IOException e) { throw new DataBlobException(e); } } @Override public void closeSource() { try { fileChannel.close(); } catch (IOException e) { throw new DataBlobException(e); } } } 

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

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

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

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

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


All Articles