注意
看此篇之前,你需要了解RocketMQ在本地是如何工作的,如果还不会请先去找找资源学习一下哦
配置文件
application.yml中关于RocketMQ的配置如下:
bg:
rocketmq:
# namesrvAddr地址
# namesrvAddr: 0.0.0.0:9876
namesrvAddr: 192.168.2.68:9876
# 生产者group名称
producerGroupName: producerGroupName
# 事务生产者group名称
transactionProducerGroupName: transactionProducerGroupName
# 消费者group名称
consumerGroupName: consumerGroupName
# 生产者实例名称
producerInstanceName: producerInstanceName
# 消费者实例名称
consumerInstanceName: consumerInstanceName
# 事务生产者实例名称
producerTranInstanceName: producerTranInstanceName
# 一次最大消费多少数量消息
consumerBatchMaxSize: 1
# 广播消费
consumerBroadcasting: false
# 消费的topic:tag
subscribe[0]: TopicTest1:TagA
# 启动的时候是否消费历史记录
enableHisConsumer: false
# 启动顺序消费
enableOrderConsumer: false
SpringBoot自动配置(核心)
需要写一个专门去读以bg.rockmq开头的配置并且需要注解
@Data
@ConfigurationProperties(RocketmqProperties.PREFIX)
public class RocketmqProperties {
public static final String PREFIX = "dg.rocketmq";
private String namesrvAddr;
private String producerGroupName;
private String transactionProducerGroupName;
private String consumerGroupName;
private String producerInstanceName;
private String consumerInstanceName;
private String producerTranInstanceName;
private int consumerBatchMaxSize;
private boolean consumerBroadcasting;
private boolean enableHisConsumer;
private boolean enableOrderConsumer;
private List<String> subscribe = new ArrayList<>();
}
根据SpringBoot的自动注入的原理还需要一个类来搞这个事
/**
* Producer:消息生产者,负责生产消息,一般由业务系统负责生产消息。
*
* Consumer:消息消费者,负责消费消息,一般是后台系统负责异步消费。
*
* Push Consumer:Consumer的一种,应用通常向Consumer对象注册一个Listener接口,一旦收到消息,Consumer对象立刻回调Linsener接口方法
*
* Pull Consumer:Consumer的一种,应用通常主动调用Consumer的拉消息方法从Broker拉消息,主动权由应用控制
*
* Consumer Group:一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致。
*
* Broker:消息中转角色,负责存储消息,转发消息,一般也称为Server,在JMS规范中成为Provider
*
* Topic: 一个Topic有四个Queue
*/
@Configuration("MQConfiguration")
@EnableConfigurationProperties(RocketmqProperties.class)
@ConditionalOnProperty(prefix = RocketmqProperties.PREFIX, value = "namesrvAddr")
public class RocketmqAutoConfiguration {
private static final Logger log = LogManager.getLogger(RocketmqAutoConfiguration.class);
@Autowired
private RocketmqProperties properties;
@Autowired
private ApplicationEventPublisher publisher;
private static boolean isFirstSub = true;
private static long startTime = System.currentTimeMillis();
/**
* 初始化向rocketmq发送普通消息的生产者
*
* @throws Exception
*/
@Bean("DefaultMQProducer")
@ConditionalOnProperty(prefix = RocketmqProperties.PREFIX, value = "producerInstanceName")
public DefaultMQProducer defaultProducer() throws Exception {
/**
* 一个应用创建一个Producer,由应用来维护此对象,可以设置为全局对象或者单例<br>
* 注意:ProducerGroupName需要由应用来保证唯一<br>
* ProducerGroup这个概念发送普通的消息时,作用不大,但是发送分布式事务消息时,比较关键,

本文详细讲解了如何在Spring Boot应用中配置RocketMQ,包括生产者与消费者的创建、消息类型区分与订阅策略,以及自动配置和监听器的实现。
最低0.47元/天 解锁文章
1276





