rocketmq实现多数据源配置
- 背景:
- 一 添加@ExtRocketMQTemplateConfiguration配置类
- 二 添加非标mq的配置参数
- 三 非标准RocketMQTemplate
背景:
在实际项目中我们可能会遇到在springboot项目中使用多个mq数据源,那我们该如何配置呢?
我们可以基于ExtRocketMQTemplateConfiguration 扩展出其他的rocketmq 数据源,相当于注入多个rocketTemplate, 只是nameServer 和 beanName 不同
一 添加@ExtRocketMQTemplateConfiguration配置类
该非标准RocketMQTemplate类只需要集成RocketMQTemplate
就行,然后再加上@ExtRocketMQTemplateConfiguration
注解,并配置nameServer即可。
package com.wxl52d41.rocketmq.config;import org.apache.rocketmq.spring.annotation.ExtRocketMQTemplateConfiguration;
import org.apache.rocketmq.spring.core.RocketMQTemplate;/*** @date 2022/4/19 16:17* @description 相当于多数据源,指定其他的nameServer。 使用的使用直接注入该对象即可*/
@ExtRocketMQTemplateConfiguration(nameServer = "${rocketmqB.name-server}",group = "${rocketmqB.producer.group}")
public class ExtRocketMQTemplate extends RocketMQTemplate {
}
二 添加非标mq的配置参数
yml配置中添加非标mq的配置参数
rocketmq:name-server: 101.200.240.47:9876producer:group: producer-demo1
rocketmqB:name-server: 101.200.240.39:9876producer:group: producer-demoB
三 非标准RocketMQTemplate
如何使用该非标准RocketMQTemplate?只需要在发送消息的类中通过@Resource注入进来,并通过name属性来指定即可使用。下面我有具体的使用案例。
@Autowiredprivate RocketMQTemplate rocketMQTemplate;/*** 如果使用其他数据源的rocketTemplate,需要指定名称*/@Resource(name = "extRocketMQTemplate")private RocketMQTemplate extRocketMQTemplate;@Testpublic void extRocketMQTemplateConvertAndSendTest() {extRocketMQTemplate.convertAndSend("springboot-mq", "hello springboot rocketmq");rocketMQTemplate.convertAndSend("springboot-mq", "hello springboot rocketmqa");}
SpringBoot集成RocketMQ4.5
RocketMQ(九)RocketMQ分布式事务实现
RocketMQ专栏