我一直在转换必须使用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 {@Autowiredprivate ConnectionFactory rabbitConnectionFactory;@BeanDirectExchange rubeExchange() {return new DirectExchange("rmq.rube.exchange", true, false);}@Beanpublic Queue rubeQueue() {return new Queue("rmq.rube.queue", true);}@BeanBinding rubeExchangeBinding(DirectExchange rubeExchange, Queue rubeQueue) {return BindingBuilder.bind(rubeQueue).to(rubeExchange).with("rube.key");}@Beanpublic 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项目在这里
- 这里使用RabbitMQ的Spring-Boot入门项目
翻译自: https://www.javacodegeeks.com/2014/10/spring-configuration-rabbitmq-connectivity.html