SpringBoot项目配置多个RabbitMQ解决方案
背景介绍
目前有一个Spring Boot项目,已经接入一个RabbitMQ Broker,由于业务扩展,需要新增一个RabbitMQ Broker进行消费,由于单个Broker时通过Spring默认配置进行使用,因此需要做出修改
Java客户端开发Demo
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(IP_ADDRESS);
factory.setPort(PORT);
factory.setUsername("root");
factory.setPassword("root123");
factory.setVirtualHost("/");
// 创建链接
Connection connection = factory.newConnection();
// 创建信道,Connection 接口被用来创建一个Channel
Channel channel = connection.createChannel();
// 创建一个type="direct" 持久化、非自动删除的交换机
channel.exchangeDeclare(QUEUE_NAME, "direct", true, false, null);
// 创建一个持久化、非排他的、非自动删除的队列
channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
// 发送一条持久化的消息
String message = "hello world!";
channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
// 关闭资源
channel.close();
connection.close();
单实例配置
- pom
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><version>2.1.2.RELEASE</version>
</dependency>
- 增加properties配置
spring.rabbitmq.username=username
spring.rabbitmq.password=password
spring.rabbitmq.host=host
spring.rabbitmq.virtual-host=/
spring.rabbitmq.port=port
- 增加配置类
@Configuration
public class RabbitMqConfiguration {@Beanpublic RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory,MessageConverter messageConverter){SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setMessageConverter(messageConverter);return factory;}@Beanpublic MessageConverter messageConverter(){ObjectMapper objectMapper = new ObjectMapper();Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter(objectMapper);return jackson2JsonMessageConverter;}
}
多实例配置
- 增加properties配置
# 默认rabbit配置
spring.rabbitmq.username=username
spring.rabbitmq.password=password
spring.rabbitmq.host=host
spring.rabbitmq.virtual-host=/
spring.rabbitmq.port=port
# 第2个MQ配置
spring.rabbitmq.second.host=second.host
spring.rabbitmq.second.username=second.username
spring.rabbitmq.second.password=second.password
spring.rabbitmq.second.port=second.port
spring.rabbitmq.second.virtual-host=/
- 修改配置类
/*** @Description:* @Author: admin* @Date: 2021/5/11 18:19*/
@Configuration
public class RabbitMqConfiguration {@Primary@Bean(name = "rabbitConnectionFactory")public ConnectionFactory rabbitConnectionFactory(@Value("${spring.rabbitmq.host}") String host,@Value("${spring.rabbitmq.port}") int port,@Value("${spring.rabbitmq.username}") String username,@Value("${spring.rabbitmq.password}") String password,@Value("${spring.rabbitmq.virtual-host}") String virtualHost) {return connectionFactory(host, port, username, password, virtualHost);}@Beanpublic RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(@Qualifier("rabbitConnectionFactory") ConnectionFactory connectionFactory,MessageConverter messageConverter) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setMessageConverter(messageConverter);return factory;}/*** 定义连接* @param host* @param port* @param username* @param password* @return*/@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,@Value("${spring.rabbitmq.second.virtual-host}") String virtualHost) {return connectionFactory(host, port, username, password, virtualHost);}/*** 声明RabbitTemplate* @param connectionFactory* @return*/@Bean(name = "secondRabbitTemplate")public RabbitTemplate dataadminmqRabbitTemplate(@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory) {RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);rabbitTemplate .setMessageConverter(new Jackson2JsonMessageConverter());return rabbitTemplate ;}@Bean(name = "secondRabbitListenerContainerFactory")public SimpleRabbitListenerContainerFactory secondRabbitListenerContainerFactory(@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory,MessageConverter messageConverter) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setMessageConverter(messageConverter);return factory;}@Beanpublic MessageConverter messageConverter(){ObjectMapper objectMapper = new ObjectMapper();Jackson2JsonMessageConverter jackson2JsonMessageConverter = new Jackson2JsonMessageConverter(objectMapper);return jackson2JsonMessageConverter;}/*** 声明连接工厂连接开发服务器** @param host* @param port* @param username* @param password* @return*/public CachingConnectionFactory connectionFactory(String host, int port, String username,String password, String virtualHost) {CachingConnectionFactory connectionFactory = new CachingConnectionFactory();connectionFactory.setHost(host);connectionFactory.setPort(port);connectionFactory.setUsername(username);connectionFactory.setPassword(password);connectionFactory.setVirtualHost(virtualHost);return connectionFactory;}
}
SpringBoot项目配置多个RabbitMQ解决方案相关推荐
- springboot项目配置视图解析器无效的问题
springboot项目配置视图解析器无效的问题 今天springboot尝试配置视图解析器的时候,如图: 一切正常,视图解析器却始终无效.后面发现问题. 在控制器的注解要使用:@Controller ...
- SpringBoot项目配置明文密码泄露问题的处理方式
SpringBoot项目配置明文密码泄露问题的处理方式: 1.引入jar包 <dependency> <groupId>com.github.ulisesbocchio ...
- IDEA SpringBoot项目配置热更新,无需每次手动重启服务器
IDEA SpringBoot项目配置热更新的步骤 在pom.xml中添加依赖: <dependency><groupId>org.springframework.boot&l ...
- Springboot项目配置404错误页面
项目结构,错误页面路径 因为下面这个项目 静态文件的路径是springboot项目默认路径,所以application.properties都不用配置. 全局错误页面配置类: import org.s ...
- springboot项目配置(yml,pom)
首先使用idea创建一个纯净的springboot项目 1,替换pom文件 <?xml version="1.0" encoding="UTF-8"?&g ...
- springboot项目配置ssl证书
1.首先进入阿里云服务器,搜索ssl证书,免费申请,dns会自动解析该证书,所以不用设置 2.下载tomcat和nginx服务器类型的证书 3.将tomcat服务器类型的文件解压,打开,获得pfx文件 ...
- SpringBoot项目配置disconf
说明: SpringBoot项目通过application.yml实现项目的配置, 配置文件如下: server: port: 9090 context-path: #/daily/ ...
- Springboot项目配置oracle数据库
前段时间的一个项目需要使用oracle数据库,之前使用的都是Spingboot+Mybatis+Druid+Mysql,没有配置Oracle的经验,现在记录一下 1.使用Navicat Premium ...
- Springboot项目配置定时重启案例
一.如果是Linux环境 1).编写重启脚本timeRestart.sh,内容如下: #! /bin/bash export LANG="en_US.UTF-8" export J ...
最新文章
- 十一月第三周学习进度条
- vim批量转文件编码
- Android之Android studio如何解决Multiple dex files define Landroid/support/a(文件重复引用错误)
- wordpress 添加自定义的一定级菜单
- ios 简单的计时器游戏 NSUserDefaults NSDate NSTimer
- Shell脚本实现SSH免密登录及批量配置管理
- 注解的定义与反射调用
- 表多个字段与其他表关系,left join on 顺序
- 那四年,我们一起逝去的青春
- php+分割文本文件,python实现:将文本文件分割成多个小文本文件(php也可实现)...
- PHP100视频解压密码以及目录
- 阵列信号处理及matlab实现_数字阵列雷达:发射数字波束形成
- python 读取png图片 透明度
- 15b万用表怎么测电容_万用表怎么用?福禄克15B+一机详解万用表的使用方法
- python输入月份判断天数用函数的方法,python 月份天数
- rax Picture组件
- php pecl libevent,ubuntu – 安装PHP libevent PECL包的问题
- 在UE5中创建一个受战锤启发的角色
- 再见2018 你好2019
- 使用TL-WDN5200H无线网卡