赞
踩
在我们的日常工作中,大部分情况下,我们的服务一般只需要连接某一个存放消息的rabbitMQ服务器。但是,现在多用微服务和分布式的开发部署模式,一个服务连接多个rabbitMQ服务器的需求也难以避免。最近刚好遇到,并实现,发出步骤,避免大家走弯路。
首先是yml或者propertes文件中的配置信息:
spring.rabbitmq.first.host = XXXX
spring.rabbitmq.first.port = XXXX
spring.rabbitmq.first.username = XXX
spring.rabbitmq.first.password = XXXX
spring.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") @Primary public 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") @Primary public 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") @Primary public 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 属性指定名称可监听其他服务器上的消息队列。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。