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:9876
producer:
group: producer-demo1
rocketmqB:
name-server: 101.200.240.39:9876
producer:
group: producer-demoB
三 非标准RocketMQTemplate
如何使用该非标准RocketMQTemplate?只需要在发送消息的类中通过@Resource注入进来,并通过name属性来指定即可使用。下面我有具体的使用案例。
@Autowired
private RocketMQTemplate rocketMQTemplate;
/**
* 如果使用其他数据源的rocketTemplate,需要指定名称
*/
@Resource(name = "extRocketMQTemplate")
private RocketMQTemplate extRocketMQTemplate;
@Test
public void extRocketMQTemplateConvertAndSendTest() {
extRocketMQTemplate.convertAndSend("springboot-mq", "hello springboot rocketmq");
rocketMQTemplate.convertAndSend("springboot-mq", "hello springboot rocketmqa");
}
SpringBoot集成RocketMQ4.5
RocketMQ(九)RocketMQ分布式事务实现
RocketMQ专栏