spring boot rabbitmq 多MQ配置 自动 创建 队列 RPC
2017-08-28 12:26
417 查看
源码地址:https://github.com/hutuchong518/RabbitmqStudy
需求: spring boot 整合 rabbitmq rpc功能, 需要将 请求和响应 这两个队列 分别放在不同的MQ服务器上,以提高单个MQ服务器的吞吐量和性能。
MQ服务器1:
IP:192.168.179.128
对列:hello1
MQ服务器2:
IP:172.16.16.218
对列:hello2
这里实现的关键 是 创建队列 到 指定 MQ服务器中, 网上一些文章 都是 一把轮 没有区分,在实施上有问题的其实,这里通过实践并解决,以供参考。
下面是代码:
package com.zhanghui; import com.rabbitmq.client.AMQP; import org.springframework.amqp.core.Queue; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; /** * @auther zhanghui * @date 2017/8/27 21:59 * @desc */ @Configuration public class RabbitConfig { @Bean(name="firstConnectionFactory") @Primary public ConnectionFactory firstConnectionFactory( @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 ){ CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setHost(host); connectionFactory.setPort(port); connectionFactory.setUsername(username); connectionFactory.setPassword(password); return connectionFactory; } @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 ){ CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setHost(host); connectionFactory.setPort(port); connectionFactory.setUsername(username); connectionFactory.setPassword(password); return connectionFactory; } @Bean(name="firstRabbitTemplate") //@Primary //貌似没用,移除 public RabbitTemplate firstRabbitTemplate( @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory ){ RabbitTemplate firstRabbitTemplate = new RabbitTemplate(connectionFactory); return firstRabbitTemplate; } @Bean(name="secondRabbitTemplate") public RabbitTemplate secondRabbitTemplate( @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory ){ RabbitTemplate secondRabbitTemplate = new RabbitTemplate(connectionFactory); return secondRabbitTemplate; } @Bean(name="firstFactory") public SimpleRabbitListenerContainerFactory firstFactory( SimpleRabbitListenerContainerFactoryConfigurer configurer, @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory ) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); configurer.configure(factory, connectionFactory); return factory; } @Bean(name="secondFactory") public SimpleRabbitListenerContainerFactory secondFactory( SimpleRabbitListenerContainerFactoryConfigurer configurer, @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory ) { SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); configurer.configure(factory, connectionFactory); return factory; } @Bean public String firstQueue( @Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory ) { System.out.println("configuration firstQueue ........................"); //return new Queue("hello1"); try { connectionFactory.createConnection().createChannel(false).queueDeclare("hello1", false, false, false, null); }catch (Exception e){ e.printStackTrace(); }finally { return "firstQueue"; } } @Bean public String secondQueue( @Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory ) { System.out.println("configuration secondQueue ........................"); //return new Queue("hello2"); try { connectionFactory.createConnection().createChannel(false).queueDeclare("hello2", false, false, false, null); }catch (Exception e){ e.printStackTrace(); }finally { return "secondQueue"; } } //下面2个对列创建方式 测试后发现不是 针对指定mq 服务器创建,只会在第一个服务器创建 /* @Bean public Queue firstQueue() { System.out.println("configuration firstQueue ........................"); return new Queue("hello1"); } @Bean public Object secondQueue() { System.out.println("configuration secondQueue ........................"); return new Queue("hello2"); } */ }
相关文章推荐
- spring boot rabbitmq 多MQ配置 自动 创建 队列 RPC
- C#队列泛型基类BaseQueue,访问索引器时自动创建类型实例
- RocketMQ3.2.2生产者发送消息自动创建Topic队列数无法超过4个
- Rabbit MQ 的配置与队列自动创建
- 如何创建基本的高级队列之三:Push 模式(绑定存储过程,自动调用)
- Linux设备驱动实现自动创建设备节点
- SSM框架——使用MyBatis Generator自动创建代码
- 在桌面上自动创建快捷方式
- PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
- linux内核字符设备文件的自动创建
- 利用MyBatis Generator自动创建代码
- Oracle 里面创建唯一键值自动增长
- 在驱动模块初始化函数中实现设备节点的自动创建
- 一步一步SharePoint 2007之二十一:解决实现注册用户后,自动具备访问网站的权限的问题(3)——创建用户
- 如何识别真实和自动创建的索引?
- 创建指定大小,当空闲超时还会自动销毁线程的线程池
- ARM-Linux自动创建设备结点
- Android开启应用时自动创建快捷方式
- ORA-28368: 无法自动创建 wallet
- 使用MyBatis Generator自动创建代码