MonsterMQ рднрд╛рдЧ 5 рдХреЗ рд╕рд╛рде RabbitMQ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

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

рд╡рд┐рд╖рдп рдкреНрд░рдХрд╛рд░ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░


рд╡рд┐рд╖рдп рдЯрд╛рдЗрдк рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХреЛ рднреЗрдЬреЗ рдЧрдП рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдПрдХ рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдбреЙрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╢рдмреНрджреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИред рд╢рдмреНрдж рдордирдорд╛рдиреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рд╕рдВрджреЗрд╢ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╡реИрдз рдорд╛рд░реНрдЧ рдХреБрдВрдЬреА рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ: stock.usd.nyse , nyse.vmw , quick.orange.rabbit ред рдХреБрдВрдЬреА 255 рдмрд╛рдЗрдЯреНрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реИред

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

  1. * рдмрдВрдзрди рдХреБрдВрдЬреА рдореЗрдВ (рддрд╛рд░рд╛рдВрдХрди) рдХреЗрд╡рд▓ рдПрдХ рд╢рдмреНрдж рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  2. рдмрдВрдзрди рдХреБрдВрдЬреА рдореЗрдВ # (рдкрд╛рдЙрдВрдб) рдХреЛ рд╢реВрдиреНрдп рдпрд╛ рдЕрдзрд┐рдХ рд╢рдмреНрджреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЫрд╡рд┐ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдЫрд╡рд┐
( рдЖрдзрд┐рдХрд╛рд░рд┐рдХ RabbitMQ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд▓реА рдЧрдИ рдЫрд╡рд┐ )

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

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рджреЛ рдХрддрд╛рд░реЗрдВ рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИрдВ: Q1 рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреБрдВрдЬреА "* .orangeред" " рдФрд░ Q2 рдХреЗ рд╕рд╛рде рджреЛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреБрдВрдЬреА " *ред *ред * рдЦрд░рдЧреЛрд╢ " рдФрд░ " рдЖрд▓рд╕реА # ред "

рдЗрди рд▓рд┐рдВрдХреНрд╕ рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░реВрдЯрд┐рдВрдЧ:

  • Q1 рд╕рднреА рдирд╛рд░рдВрдЧреА рдЬрд╛рдирд╡рд░реЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИред
  • Q2 (rabbit) (lazy)

рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА "quick.orange.rabbit" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рджреЛрдиреЛрдВ рдХрддрд╛рд░реЛрдВ рдореЗрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдХреБрдВрдЬреА "lazy.orange.elephant" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рднреА рджреЛрдиреЛрдВ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдВрдЬреА "quick.orange.fox" рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░ рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рдХреБрдВрдЬреА "lazy.brown.fox" рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдореЗрдВ рд╣реИред "Lazy.pink.rabbit" рдХреЛ рджреВрд╕рд░реА рдмрд╛рд░ рдПрдХ рдмрд╛рд░ рдбрд┐рд▓реАрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рджреЛрдиреЛрдВ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреБрдВрдЬреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред

"Quick.brown.fox" рдХрд┐рд╕реА рднреА рдХрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдПрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдХрд┐рд╕реА рднреА рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреБрдВрдЬреА рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрдк рд░реВрдЯрд┐рдВрдЧ рдХреБрдВрдЬреА рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЫреЛрдЯреЗ рдпрд╛ рдмрдбрд╝реЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдирд╛рд░рдВрдЧреА")рдпрд╛ "quick.orange.male.rabbit" ) рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреБрдВрдЬреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдВрджреЗрд╢ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

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

рдХреЛрдб рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛


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

try {
   $producer = \MonsterMQ\Client\Producer();

   $producer->connect('127.0.0.1', 5672);
   $producer->logIn('guest', 'guest');

   $producer->newTopicExchange('topic-logs');

   $routingKey = isset($argv[1]) && !empty($argv[1]) ? $argv[1] : 'anonymous.info';

   $message = implode(' ', array_slice($argv, 2));
   $message = empty($message) ? "Hello World!" : $message;

   $producer->publish($message, $routingKey, 'topic-logs');

   echo "\n Sent {$message} \n";
} catch(\Exception $e) {
   var_dump($e);
}

рдХреЛрдб рдХрд╛рд░реНрдпрдХрд░реНрддрд╛-1. рдПрдлрдкреА

try {
   $consumer = \MonsterMQ\Client\Consumer();

   $consumer->connect('127.0.0.1', 5672);
   $consumer->logIn('guest', 'guest');

   $producer->queue('queue-1')->setExclusive()->declare();

   $consumer->newTopicExchange('topic-logs');

   $bindingKeys = array_slice($argv, 1);
   if (empty($bindingKeys)) {
      file_put_contents('php://stderr', "Usage: $argv[0] [binding_key]\n");
      exit(1);
   }

   foreach ($bindingKeys as $key) {
      $producer->queue('queue-1')->bind('topic-logs', $key);
   }

   $consumer->consume('queue-1');

  echo " \n Waiting for logs. To exit press CTRL+C\n";

   $consumer->wait(function ($message, $channelNumber) use ($consumer){
      echo "\n $message \n";
   });
} catch(\Exception $e) {
   var_dump($e);
}

рдХреЛрдб рдХрд╛рд░реНрдпрдХрд░реНрддрд╛-2. рдПрдлрдкреА

try {
   $consumer = \MonsterMQ\Client\Consumer();

   $consumer->connect('127.0.0.1', 5672);
   $consumer->logIn('guest', 'guest');

   $producer->queue('queue-2')->setExclusive()->declare();

   $consumer->newTopicExchange('topic-logs');

   $bindingKeys = array_slice($argv, 1);
   if (empty($bindingKeys)) {
      file_put_contents('php://stderr', "Usage: $argv[0] [binding_key]\n");
      exit(1);
   }

   foreach ($bindingKeys as $key) {
      $producer->queue('queue-2')->bind('topic-logs', $key);
   }

   $consumer->consume('queue-2');

  echo " \n Waiting for logs. To exit press CTRL+C\n";

   $consumer->wait(function ($message, $channelNumber) use ($consumer){
      echo "\n $message \n";
   });
} catch(\Exception $e) {
   var_dump($e);
}

рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдХреЗрд╡рд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓ рдХрд░реЗрдВ

php worker-1.php "*.critical"

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

php worker-2.php "kern.*" "*.critical"

рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдРрд╕рд╛ рдХрд░реЗрдВ:

php send.php "kern.critical" "A critical kernel error"

рдЗрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред

All Articles