Я занимался преобразованием приложения, в котором я должен использовать механизм 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
|
@Configurationpublic 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 Биджу Кунджуммен из блога « все и вся» . |