SpringBoot工程配置连接两个rabbitMQ服务器
在我们的日常工作中,大部分情况下,我们的服务一般只需要连接某一个存放消息的rabbitMQ服务器。但是,现在多用微服务和分布式的开发部署模式,一个服务连接多个rabbitMQ服务器的需求也难以避免。最近刚好遇到,并实现,发出步骤,避免大家走弯路。
首先是yml或者propertes文件中的配置信息:
spring.rabbitmq.first.host = XXXX
spring.rabbitmq.first.port = XXXX
spring.rabbitmq.first.username = XXX
spring.rabbitmq.first.password = XXXXspring.rabbitmq.second.host = XXXX
spring.rabbitmq.second.port = XXXX
spring.rabbitmq.second.username = XXXX
spring.rabbitmq.second.password = XXXX
然后是connectionFactory
如果连接单个rabbitMQ服务器,可以直接使用amqp官方jar包,不用手写这个类。但是连接两个rabbitMQ服务器就需要手写这个构建连接类
public class connectionFactory {/*定义连接,rabbitMQ*/@Bean(name = "mainConnectionFactory")@Primarypublic ConnectionFactory mainConnectionFactory(@Value("${spring.rabbitmq.first.host}") String host,@Value("${spring.rabbitmq.first.port}") int port,@Value("${spring.rabbitmq.first.username}") String username,@Value("${spring.rabbitmq.first.password}") String password) {return connectionFactory(host, port, username, password);}/*定义连接*/@Bean(name = "secondConnectionFactory")public ConnectionFactory secondConnectionFactory(@Value("${spring.rabbitmq.second.host}") String host,@Value("${spring.rabbitmq.second.port}") int port,@Value("${spring.rabbitmq.second.username}") String username,@Value("${spring.rabbitmq.second.password}") String password) {return connectionFactory(host, port, username, password);}/*定义连接*/public CachingConnectionFactory connectionFactory(String host, int port, String username, String password) {CachingConnectionFactory connectionFactory = new CachingConnectionFactory();connectionFactory.setHost(host);connectionFactory.setPort(port);connectionFactory.setUsername(username);connectionFactory.setPassword(password);// connectionFactory.setVirtualHost(virtual_host);return connectionFactory;}@Bean(name = "mainRabbitTemplate")@Primarypublic RabbitTemplate mainRabbitTemplate(@Qualifier("mainConnectionFactory") ConnectionFactory connectionFactory) {RabbitTemplate mainRabbitTemplate = new RabbitTemplate(connectionFactory);mainRabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());return mainRabbitTemplate;}@Bean(name = "secondRabbitTemplate")public RabbitTemplate secondRabbitTemplate(@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory) {RabbitTemplate secondRabbitTemplate = new RabbitTemplate(connectionFactory);return secondRabbitTemplate;}@Bean(name = "mainFactory")@Primarypublic SimpleRabbitListenerContainerFactory myFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,@Qualifier("mainConnectionFactory") ConnectionFactory connectionFactory) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setMessageConverter(new Jackson2JsonMessageConverter());configurer.configure(factory, connectionFactory);return factory;}@Bean(name = "secondFactory")public SimpleRabbitListenerContainerFactory secondFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConcurrentConsumers(10);factory.setMaxConcurrentConsumers(20);factory.setPrefetchCount(1);configurer.configure(factory, connectionFactory);return factory;}}
监听消息队列:
@RabbitListener(queues = “${mq.clock}”)
可监听配置为@Primary的消息服务器上的队列
@RabbitListener(queues = “${mq.parsing_face_picture_iot}”,containerFactory = “secondFactory”)
通过containerFactory 属性指定名称可监听其他服务器上的消息队列。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
