Статьи

Spring @Configuration — подключение к RabbitMQ

Я занимался преобразованием приложения, в котором я должен использовать механизм 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-AMQP проект здесь
  • Spring-Boot стартовый проект с использованием RabbitMQ здесь
Ссылка: Spring @Configuration — подключение RabbitMQ от нашего партнера по JCG Биджу Кунджуммен из блога « все и вся» .