rocketMq和activeMq,rabbitMQ,kafka为目前主流的消息中间件,其中rocketMq是阿里巴巴公司开源的一个消息中间件,现已贡献给apache组织。apache官网描述:Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟,高性能和可靠性,万亿级容量和灵活的可扩展性。它由四部分组成:名称服务器,代理,生产者和消费者。它们中的每一个都可以水平扩展而没有单一的故障点。
今天我们将讨论springboot如何整合rocketmq。
1、安装RocketMQ,参见博客:https://blog.youkuaiyun.com/weixin_42315600/article/details/88677674
2、引入maven依赖
<!--RocketMQ-->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.4.0</version>
</dependency>
<!--PropertySource注解解析properties文件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
3、Resource目录下常见config文件夹,创建rocketmq.properties配置文件
# 指定namesrv地址
sbootitframe.rocketmq.namesrvAddr=localhost:9876
#生产者group名称
sbootitframe.rocketmq.producerGroupName=user_group
#事务生产者group名称
sbootitframe.rocketmq.transactionProducerGroupName=order_transaction
#消费者group名称
sbootitframe.rocketmq.consumerGroupName=user_consumer_group
#生产者实例名称
sbootitframe.rocketmq.producerInstanceName=user_producer_instance
#消费者实例名称
sbootitframe.rocketmq.consumerInstanceName=user_consumer_instance
#事务生产者实例名称
sbootitframe.rocketmq.producerTranInstanceName=user_producer_transacition
#一次最大消费多少数量消息
sbootitframe.rocketmq.consumerBatchMaxSize=1
#广播消费
sbootitframe.rocketmq.consumerBroadcasting=false
#消费的topic:tag
sbootitframe.rocketmq.subscribe[0]=user-topic:white
#启动的时候是否消费历史记录
sbootitframe.rocketmq.enableHistoryConsumer=false
#启动顺序消费
sbootitframe.rocketmq.enableOrderConsumer=false
4、创建配置文件实例化bean,把rocketmq.properties读取到bean中
package com.cmos.sbootitframe.web.controller.mq;
import java.util.ArrayList;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* @Function 读取配置文件信息
*/
@Component
@Configuration
@PropertySource("classpath:config/rocketmq.properties")
@ConfigurationProperties(prefix = "sbootitframe.rocketmq")
public class RocketMQProperties {
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 enableHistoryConsumer;
private boolean enableOrderConsumer;
private List<String> subscribe = new ArrayList<String>();
public String getNamesrvAddr() {
return namesrvAddr;
}
public void setNamesrvAddr(String namesrvAddr) {
this.namesrvAddr = namesrvAddr;
}
public String getProducerGroupName() {
return producerGroupName;
}
public void setProducerGroupName(String producerGroupName) {
this.producerGroupName = producerGroupName;
}
public String getTransactionProducerGroupName() {
return transactionProducerGroupName;
}
public void setTransactionProducerGroupName(String transactionProducerGroupName) {
this.transactionProducerGroupName = transactionProducerGroupName;
}
public String getConsumerGroupName() {
return consumerGroupName;
}
public void setConsumerGroupName(String consumerGroupName) {
this.consumerGroupName = consumerGroupName;
}
public String getProducerInstanceName() {
return producerInstanceName;
}
public void setProducerInstanceName(String producerInstanceName) {
this.producerInstanceName = producerInstan