рд░реИрдмрд┐рдЯрдордХреНрдпреВ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрд╛ рд╕рд░рд▓ рдПрдХреАрдХрд░рдг

рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрдиреБрд╡рд╛рдж рдкрд╛рдареНрдпрдХреНрд░рдо "рдбреЗрд╡рд▓рдкрд░ рдСрди рдж рд╕реНрдкреНрд░рд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ" рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред




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

рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд░реИрдмрд┐рдЯрдордХреНрдпреВ рдХреЗ рдПрдХреАрдХрд░рдг рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд░рд┐рдЯреНрд░реАрдЬрд╝ рдХреА рдПрдХ рдирдИ, рдмреЗрд╣рддрд░ рдЕрд╡рдзрд╛рд░рдгрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдорд╛рдирдХ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдПрдордХреНрдпреВрдкреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ)ред
рд╕рд░рд▓? рдкрд░ рдХреИрд╕реЗ?


рд╕реНрд╡рддрдГ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдПрдордХреНрдпреВрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ RabbitMQ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрд╢рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SSL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд╕реЗрдо, рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд ConnectionFactory, RabbitAdmin, RabbitTemplateрдФрд░ AbstractRabbitListenerContainerFactoryред

рд▓реЗрдХрд┐рди рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ RabbitMQ рдореЗрдВ рдХрдИ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдПрдордХреНрдпреВрдкреА рдореЗрдВ, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЪреБрдЕрд▓ рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП RabbitTemplateрдФрд░ рдЙрд╕рдХреЗ рдореИрдиреБрдЕрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ RabbitListenerред



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рд╕рдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдордп рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕рд┐рд░рджрд░реНрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрди рд╕рднреА рдмреАрдиреНрд╕ рдХреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЖрдкрдХреЛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рд╡рд╣ рд╣реИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ application.propertiesрдФрд░ рдЬрд╛рджреВ рд╣реЛ рдЬрд╛рдПрдЧрд╛!
рд╡рд╛рд╣, рд▓реЗрдХрд┐рди рд╡рд┐рдиреНрдпрд╛рд╕ рдореЗрдВ рдХреНрдпрд╛ рджрд┐рдЦрддрд╛ рд╣реИ application.properties?

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╣реИ - рдпрд╣ spring.rabbitmq.customред

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

рдШрдЯрдирд╛ рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рдж, рдЖрдк рд╕рдВрдкрддреНрддрд┐ рдФрд░ рдореВрд▓реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА рдЧреБрдг рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ ред

рддреЛ, рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ: рдиреАрдЪреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред

spring.rabbitmq.custom.<YOUR_EVENT>.<PROPERTY>=<VALUE>




spring.rabbitmq.custom.some-event.host=localhost
spring.rabbitmq.custom.some-event.port=5672
spring.rabbitmq.custom.some-event.ttlRetryMessage=5000
spring.rabbitmq.custom.some-event.maxRetriesAttempts=5
spring.rabbitmq.custom.some-event.ttlMultiply=2
spring.rabbitmq.custom.some-event.queueRoutingKey=ROUTING.KEY.TEST
spring.rabbitmq.custom.some-event.exchange=ex.custom.direct
spring.rabbitmq.custom.some-event.exchangeType=direct
spring.rabbitmq.custom.some-event.queue=queue.custom.test
spring.rabbitmq.custom.some-event.autoCreate=true
spring.rabbitmq.custom.some-event.concurrentConsumers=1
spring.rabbitmq.custom.some-event.maxConcurrentConsumers=1
spring.rabbitmq.custom.some-event.virtualHost=tradeshift
spring.rabbitmq.custom.some-event.primary=true
spring.rabbitmq.custom.some-event.sslConnection=true
spring.rabbitmq.custom.some-event.tlsKeystoreLocation=file:///etc/tradeshift/your-service/tls-keystore.pkcs12
spring.rabbitmq.custom.some-event.tlsKeystorePassword=${RABBITMQ_PASS_CERT}

spring.rabbitmq.custom.another-event.host=localhost
spring.rabbitmq.custom.another-event.port=5672
spring.rabbitmq.custom.another-event.ttlRetryMessage=5000
spring.rabbitmq.custom.another-event.maxRetriesAttempts=5
spring.rabbitmq.custom.another-event.queueRoutingKey=TEST.QUEUE
spring.rabbitmq.custom.another-event.exchange=ex_test_1
spring.rabbitmq.custom.another-event.exchangeType=direct
spring.rabbitmq.custom.another-event.queue=queue_test_1
spring.rabbitmq.custom.another-event.autoCreate=true
spring.rabbitmq.custom.another-event.concurrentConsumers=1
spring.rabbitmq.custom.another-event.maxConcurrentConsumers=1
spring.rabbitmq.custom.another-event.username=guest
spring.rabbitmq.custom.another-event.password=${RABBITMQ_PASS}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ рдХреЛрдб рдХреА рдПрдХ рднреА рдкрдВрдХреНрддрд┐ рдирд╣реАрдВ рд▓рд┐рдЦреА рд╣реИ !!!
рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдирдИ рд░реАрдкреНрд▓реЗ рд░рдгрдиреАрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд╣ рд░рд╣реЗ рдереЗ, рд╣реИ рдирд╛?

рд╣рд╛рдБ рдореЗрд░реЗ рдорд┐рддреНрд░ рдиреЗ рдХрд╣рд╛!

рд▓реЗрдХрд┐рди рдЗрд╕ рдирдИ рд░рдгрдиреАрддрд┐ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП RabbitMQ рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ AMQP рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, RabbitMQ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд╕рдВрдкреВрд░реНрдг рд╕рдВрджреЗрд╢ рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, RabbitMQ 3.8 рд╕реЗ рдкрд╣рд▓реЗ , рд╕рдВрджреЗрд╢ рд╣реЗрдбрд░ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд░рд┐рдЯреНрд░реАрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдереАред

RabbitMQ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░:

  • рдпрджрд┐ рдЖрдкрдиреЗ рд╕рдордп-рд╕рдордп рдкрд░ рд▓рд╛рдЗрд╡ (TTL, рдЬреАрд╡рдирдХрд╛рд▓) рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ , рддреЛ RabbitMQ рд▓рдЧрд╛рддрд╛рд░ рдЖрдкрдХреЗ рд╕рдВрджреЗрд╢ рдХреЛ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред
  • рдпрджрд┐ рдЖрдкрдиреЗ рдЯреАрдЯреАрдПрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреАрдПрд▓рдПрдХреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ , рддреЛ рдЯреАрдЯреАрдПрд▓ рдХреЗ рдмрд╛рдж рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдк рдЗрд╕реЗ рдЦреЛ рджреЗрдВрдЧреЗред
  • рдпрджрд┐ рдЖрдкрдиреЗ TTL рдФрд░ dlx рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ , рддреЛ TTL рдХреЗ рдмрд╛рдж dlx рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХреНрд╕рдЪреЗрдВрдЬрд░ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ ред


RabbitMQ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдмрдврд╝рддреЗ рд╣реБрдП рдЯреАрдЯреАрдПрд▓ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд╕реНрдерд┐рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд░рд┐рдЯреНрд░реАрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ?

рдмрдбрд╝рд╛ рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓!

рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдХреНрдпреВрдПрдордкреА рдФрд░ рд╕реНрдкреНрд░рд┐рдВрдЧ рдЦрд░рдЧреЛрд╢ рдЯреНрдпреВрдирд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ!

рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рдкреБрди: рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдПрдПрдордХреНрдпреВрдкреА


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

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

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

spring.rabbitmq.listener.simple.retry.enabled=true
spring.rabbitmq.listener.simple.retry.initial-interval=2000
spring.rabbitmq.listener.simple.retry.max-attempts=5
spring.rabbitmq.listener.simple.retry.multiplier=2
spring.rabbitmq.listener.simple.max-concurrency=5
spring.rabbitmq.listener.simple.concurrency=5


рд╡рд╕рдВрдд рдЦрд░рдЧреЛрд╢ рдЯреНрдпреВрдирд┐рдВрдЧ


рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд░рд┐рдЯреНрд░реАрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХрддрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рд╣рдо рд╕рдорд╛рдкреНрддрд┐ рд╕рдВрджреЗрд╢ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдПрдХреНрд╕-рдбреЗрде рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреАрдЯреАрдПрд▓ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд░рд┐рдЯреНрд░реАрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдкрд░ рдХреИрд╕реЗ?

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

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


рд╕реНрдкреНрд░рд┐рдВрдЧ рд░реИрдмрд┐рдЯрдПрдордХреНрдпреВ рдЯреНрдпреВрдирд┐рдВрдЧ рд░рд┐рдЯреНрд░реА
рдХреНрдпрд╛ рдореИрдВ рдСрдЯреЛрдХреИрдирдлрд┐рдЧрд░реЗрд╢рди рдХреЗ рдмрд┐рдирд╛ рдЖрдкрдХреА рд░рд┐рдЯреНрд░реА рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдореЗрд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдлрд▓рд┐рдпрд╛рдБ рд╣реИрдВ, рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред

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

рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдЯреЛрдХреЙрдирдлрд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

spring.rabbitmq.enable.custom.autoconfiguration=false

рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдиреЗрдХреНрд╢рди рд╣реИрдВ, рдореБрдЭреЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

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

spring.rabbitmq.custom.<YOUR_EVENT>.rabbitTemplateBeanName= <RABBITTEMPLATE_BEAN_NAME>

RabbitTemplateHandler
рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛! рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ? рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ?
рд╣рд╛рдБ! рдЗрд╕ рднрдВрдбрд╛рд░

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

рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рд╕рд░рд▓ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдВрдЧрд╛!

рдкреНрд░рдХрд╛рд╢рдХ


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

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

рдПрдХ рдЙрджрд╛рд╣рд░рдг :

@Value("${spring.rabbitmq.custom.some-event.exchange}")
private String exchangeSomeEvent;

@Value("${spring.rabbitmq.custom.some-event.queueRoutingKey}")
private String routingKeySomeEvent;

@Autowired
private final RabbitTemplateHandler rabbitTemplateHandler;

public void sendMessage(final String message) {
   rabbitTemplateHandler.getRabbitTemplate("some-event").convertAndSend(exchangeSomeEvent, routingKeySomeEvent, message);
}

рдЧреНрд░рд╛рд╣рдХ


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

рдЖрдкрдХреЛ рдЗрд╕реЗ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдШрдЯрдирд╛ рдХрд╛ рдирд╛рдо рдкрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рднреА рдЬрд╛рджреВ рдХрд░реЗрдЧрд╛! рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд░рд┐рдЯреНрд░реАрдЯ рдФрд░ dlq рдХреЛ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИрдВред

рдЙрдиреНрд╣реЗрдВ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ EnableRabbitRetryAndDlqрдФрд░ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдиреЛрдЯ : рдЖрдк рдпрд╣ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░рд┐рдЯреНрд░реАрдЯ рдФрд░ dlq рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдЕрдкрд╡рд╛рдж рд╣реИрдВред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИ Exception.class, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред

рдЙрджрд╛рд╣рд░рдг:

@RabbitListener(containerFactory = "some-event", queues = "${spring.rabbitmq.custom.some-event.queue}")
@EnableRabbitRetryAndDlq(event = "some-event", exceptions = { IllegalArgumentException.class, RuntimeException.class })
public void onMessage(Message message) {
   ...
}

рдпрд╣ рд╕рдм рд╣реИ! рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВрдЧреЗ рдЬрд┐рддрдирд╛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ!

рдФрд░, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг: рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ!

рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ рдзрдиреНрдпрд╡рд╛рдж


рдЖрдВрджреНрд░реЗ рд▓реБрдЗрд╕ рдЧреЛрдореНрд╕
рд░реЛрдЬреЗрд░рд┐рдпреЛ рдмреБрдПрдиреЛ
рд▓рд┐рдпреЛрдирд╛рд░реНрдбреЛ рдлрд░реЗрд░рд╛



рдореБрдлреНрдд рдкрд╛рда рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░реЗрдВред


All Articles