RocketMQ环境搭建与测试
1.下载RocketMQ
https://rocketmq.apache.org/download/
这里下载的是 rocketmq-all-5.1.0 版本
2.安装RocketMQ
1.上传下载好的文件到服务器指定位置
2.解压文件
unzip rocketmq-all-5.1.0-bin-release.zip
3.修改配置文件 broker.conf
vi rocketmq-5.1.4/bin/broker.conf
# nameServer地址,如果有多个nameServer用分号分割
namesrvAddr=你的ip地址:9876
# 当前broker监听的IP
brokerIP1:你的ip地址
4.修改runbroker.sh和runserver.sh的JVM参数
vi rocketmq-5.1.4/bin/runbroker.sh
vi rocketmq-5.1.4/bin/runbroker.sh
broker.conf
brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# nameServer地址,如果有多个nameServer用分号分割
namesrvAddr=192.168.234.136:9876
# 当前broker监听的IP
brokerIP1:192.168.234.136
runbroker.sh
choose_gc_log_directory
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m"
runServer.sh
choose_gc_options()
{
# Example of JAVA_MAJOR_VERSION value : '1', '9', '10', '11', ...
# '1' means releases befor Java 9
JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | awk -F '"' '/version/ {print $2}' | awk -F '.' '{print $1}')
if [ -z "$JAVA_MAJOR_VERSION" ] || [ "$JAVA_MAJOR_VERSION" -lt "9" ] ; then
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn200m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
else
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M"
fi
}
启动NameServer和broker
nohup sh bin/mqnamesrv > mqnamesrv.out 2>&1 &
nohup sh bin/mqbroker -n localhost:9876 --enable-proxy > mqbroker.out 2>&1 &
3安装rockermq dashboard(可视化控制台)
https://github.com/apache/rocketmq-dashboard/archive/refs/tags/rocketmq-dashboard-1.0.0.tar.gz
1.解压
#配置源
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
#安装
yum -y install apache-maven
#查看版本
mvn -version
2.配置阿里云镜像
vi /etc/maven/settings.xml
修改settings
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
3.切换至源码目录,编译 rocketmq-dashboard
mvn clean package -Dmaven.test.skip=true
4.运行 rocketmq-dashboard
nohup java -jar target/rocketmq-dashboard-1.0.0.jar --rocketmq.config.namesrvAddr=192.168.234.136:9876 --server.port=9999 > rocketmq-dashboard.file 2>&1 &
4.SpringBoot 整合RocketMQ
1.pom文件
<rocketmq-spring-boot-starter-version>2.0.3</rocketmq-spring-boot-starter-version>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>${rocketmq-spring-boot-starter-version}</version>
</dependency>
2.yml文件配置
rocketmq:
consumer:
syjstopic: your_topic
group: SZYH_CONSUMER_GROUP
# 一次拉取消息最大值,注意是拉取消息的最大值而非消费最大值
pull-batch-size: 10
name-server: 192.168.234.136:9876
producer:
# 发送同一类消息的设置为同一个group,保证唯一
group: SPRINGBOOT_PRODUCER_GROUP
syjstopic: fast_topic
# 发送消息超时时间,默认3000
sendMessageTimeout: 10000
# 发送消息失败重试次数,默认2
retryTimesWhenSendFailed: 2
# 异步消息重试此处,默认2
retryTimesWhenSendAsyncFailed: 2
# 消息最大长度,默认1024 * 1024 * 4(默认4M)
maxMessageSize: 4096
# 压缩消息阈值,默认4k(1024 * 4)
compressMessageBodyThreshold: 4096
# 是否在内部发送失败时重试另一个broker,默认false
retryNextServer: false
3 RockerMQ 消费者
@Slf4j
@Component
@RocketMQMessageListener(topic = "${rocketmq.consumer.syjstopic}",consumerGroup="${rocketmq.consumer.group}")
public class MQSyjsMsgListener implements RocketMQListener<MessageExt> {
@Override
public void onMessage(MessageExt message) {
String msgId = message.getMsgId();
String msg = new String(message.getBody());
log.info("印花rocket消费信息 SYGL_SYJS ======msgId:{},message:{}",msgId,msg);
}
}
4 RockerMQ 生产者 @Service @Slf4j public class MQSyjsMsgServiceImpl implements MQSyjsMsgService {
@Autowired
private RocketMQTemplate rocketMQTemplate;
@Value("${rocket.producer.syjstopic}")
private String topic;
@Override
public void sendSyjsMsg(MqSyjsReqDto dto) {
SendResult sendResult = rocketMQTemplate.syncSend(topic, dto);
log.info("印花rocket生产信息,发送结果{},MsgId {}", sendResult.getSendStatus(),sendResult.getMsgId());
}
}