我一直在转换必须使用Spring @Configuration机制配置到RabbitMQ的连接的应用程序-最初,我使用xml bean定义文件来描述配置。
这是我的原始配置:
<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”的路由键将消息发送到交换机以路由到队列
可以将其转换为以下基于@Configuration的java配置:
@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
参考文献:
翻译自: https://www.javacodegeeks.com/2014/10/spring-configuration-rabbitmq-connectivity.html