Я занимался преобразованием приложения, в котором я должен использовать механизм Spring @Configuration для настройки подключения к RabbitMQ — изначально у меня была конфигурация, описанная с использованием файла определения компонента XML.
Итак, это была моя первоначальная конфигурация:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
< beans ...;> < context:property-placeholder /> < rabbit:connection-factory id = "rabbitConnectionFactory" username = "${rabbit.user}" host = "localhost" password = "${rabbit.pass}" port = "5672" /> < rabbit:template id = "amqpTemplate" connection-factory = "rabbitConnectionFactory" exchange = "rmq.rube.exchange" routing-key = "rube.key" channel-transacted = "true" /> < rabbit:queue name = "rmq.rube.queue" durable = "true" /> < rabbit:direct-exchange name = "rmq.rube.exchange" durable = "true" > < rabbit:bindings > < rabbit:binding queue = "rmq.rube.queue" key = "rube.key" ></ rabbit:binding > </ rabbit:bindings > </ rabbit:direct-exchange > </ beans > |
Это довольно простая конфигурация, которая:
- устанавливает соединение с сервером RabbitMQ,
- создает длительную очередь (если она недоступна)
- создает долговременный обмен
- и настраивает привязку для отправки сообщений в обмен для маршрутизации в очередь на основе ключа маршрутизации под названием «rube.key»
Это можно перевести в следующую конфигурацию Java на основе @Configuration:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
@Configuration public class RabbitConfig { @Autowired private ConnectionFactory rabbitConnectionFactory; @Bean DirectExchange rubeExchange() { return new DirectExchange( "rmq.rube.exchange" , true , false ); } @Bean public Queue rubeQueue() { return new Queue( "rmq.rube.queue" , true ); } @Bean Binding rubeExchangeBinding(DirectExchange rubeExchange, Queue rubeQueue) { return BindingBuilder.bind(rubeQueue).to(rubeExchange).with( "rube.key" ); } @Bean public RabbitTemplate rubeExchangeTemplate() { RabbitTemplate r = new RabbitTemplate(rabbitConnectionFactory); r.setExchange( "rmq.rube.exchange" ); r.setRoutingKey( "rube.key" ); r.setConnectionFactory(rabbitConnectionFactory); return r; } } |
Эта конфигурация должна выглядеть намного проще, чем XML-версия конфигурации. Я немного обманываю здесь, но вы должны увидеть отсутствующую connectionFactory, которая просто внедряется в эту конфигурацию, откуда она взялась … это на самом деле является частью приложения, основанного на Spring Boot, и есть конфигурация Spring Boot Auto для RabbitMQ connectionFactory, основанный на том, присутствуют ли связанные библиотеки RabbitMQ в пути к классам.
Вот полная конфигурация, если вы заинтересованы в дальнейшем изучении — https://github.com/bijukunjummen/rg-si-rabbit/blob/master/src/main/java/rube/config/RabbitConfig.java
Рекомендации:
Ссылка: | Spring @Configuration — подключение RabbitMQ от нашего партнера по JCG Биджу Кунджуммен из блога « все и вся» . |