一、使用中遇到的问题
问题1: mqbroker启动失败原因: runbroker.sh里面设置的内存大小太大了。runserver.sh 有类似问题
问题2: Broker禁止自动创建Topic,且用户没有通过手工方式创建Topic 会出现 No route info of this topic 异常,另外代码编程中,导入的类库需要全,具体可以参考rockermq的lib文件夹下的jar包。
问题3: ServletRequest / ServletResponse / MultipartFile 这些对象注意,是不能被序列化的,特别注意要放入消息队列的对象是否可以被序列化。
注意消息最大长度设置参数,规范要求。
二、linux使用 启动: nohup sh mqnamesrv &
nohup sh mqbroker -n localhost:9876 & nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true & nohup sh mqbroker -n localhost:9876 ?-c /opt/rocketmq/rocketmq-all-4.7.0-bin-release/conf/broker.conf ? & nohup sh mqbroker -n localhost:9876 ?autoCreateTopicEnable=true -c /opt/rocketmq/rocketmq-all-4.7.0-bin-release/conf/broker.conf ? & nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties & broker的默认端口是10911 默认IP是拿到的第一个网卡 The broker[daqinhere, 10.10.10.12:10911] boot success. serializeType=JSON and name server is localhost:9876 HAServer: 10.10.10.12:10912
指定broker的ip地址方式是在其配置文件中配置: brokerIP1=10.10.10.12 ? ? 即可
./mqbroker -n 127.0.0.1:9876 -p ? 查看配置信息,比如autoCreateTopicEnable是不是true
测试消息发送与接收: export NAMESRV_ADDR=localhost:9876 sh tools.sh org.apache.rocketmq.example.quickstart.Producer ? ? ? ?生产消息 java -server -Xms1g -Xmx1g -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Djava.ext.dirs=./../lib:/usr/java/jdk1.8.0_212-amd64/jre/lib/ext:/usr/java/jdk1.8.0_212-amd64/lib/ext -cp .:./../conf:.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar org.apache.rocketmq.example.quickstart.Producer
java -server -Xms1g -Xmx1g -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Djava.ext.dirs=./../lib:/usr/java/jdk1.8.0_212-amd64/jre/lib/ext:/usr/java/jdk1.8.0_212-amd64/lib/ext -cp .:./../conf:.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar com.test.TestSth
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer ? ?消费消息
停止: sh mqshutdown broker sh mqshutdown namesrv
rm -rf ../store/*
nohup sh mqnamesrv & nohup sh mqbroker -n localhost:9876 ?-c /opt/rocketmq/rocketmq-all-4.7.0-bin-release/conf/broker.conf ? &
sh mqadmin clusterList -n localhost:9876 ? ? ? ? ? ? ? ?查看nameserver上注册了哪些broker。
手动创建rocketmq中的topic sh mqadmin updatetopic -n mq服务器所在地址 -c 进群组名 -t topic名字 单master的默认群组名是DefaultCluster,配置在 broker.conf ?中。 sh mqadmin updatetopic -n 10.10.10.12:9876 -c DefaultCluster -t configTopicArp2 sh mqadmin updateTopic -b localhost:10911 -t TopicTest sh mqadmin updatetopic -n 10.10.10.12:9876 -c AdpMqCluster -t topic_topic
自动创建topic主题生效要求客户端和服务端版本一致,目前客户端和服务端都是4.7.0版本的。 使用自动创建主题存在不好的地方,部分场景消息收到的时间间隔很长。https://www.sohu.com/a/322176700_115128
查看topic列表: sh mqadmin topicList -n localhost:9876 查看特定topic ?TopicTestC的cluser: sh mqadmin topicClusterList -n localhost:9876 -t TopicTestC 删除特定topoc ? TopicTestTaohuazhong1: sh mqadmin deleteTopic -n localhost:9876 -t TopicTestTaohuazhong1 -c DefultCluster 查看topic路由信息: sh mqadmin topicRoute -n localhost:9876 -t TopicTest 查看topic状态: sh mqadmin topicStatus -n localhost:9876 -t TopicTest https://www.jianshu.com/p/84a6948f45cf
提供了基于DLedger的master选举机制。DLedger是基于RAFT协议做一定变更开发的选举机制。 利用分布式系统验证与故障注入框架 Jepsen 来检测 DLedger 存在的问题,并验证系统的可靠性。 https://zhuanlan.zhihu.com/p/77166786
可靠性设计: 1、磁盘占用 ?RocketMQ所有消息都是持久化的,采用文件记录形式持久化。RocketMQ没有内存Buffer概念,RocketMQ的队列都是持久化磁盘,数据定期清除。Broker会定期删除过期的数据,例如Broker只保存3天的消息,那么这个Buffer虽然长度无限,但是3天前的数据会被从队尾删除。 2、消息重发业务处理,消息重试机制可以指定失败重试次数。rocketmq不支持Exactly Only Once,要求在业务上进行去重,也就是说消费消息要做到幂等性。 3、消息有序保证 RocketMQ可以严格的保证消息有序 4、批量发送消息 单次超过4MB,需要保护,具体参见官方优秀实践。
broker配置文件: fileReservedTime?= 72,文件保留时间(单位小时),默认为3天 deleteWhen?= “04”,何时触发删除文件,默认凌晨4点删除文件 brokerRole = ASYNC_MASTER ? broker的角色:异步复制的master,同步双写的master,slave flushDiskType = ASYNC_FLUSH ?刷盘:同步,异步
1:物理使用率大于diskSpaceWarningLevelRatio(默认90%可通过参数设置),则会阻止新消息的插入 2:物理使用率大于diskSpaceCleanForciblyRatio(默认85%,可设置),则过进行过期物理文件的删除 3:恢复磁盘可写 配合 #1使用 4:物理磁盘使用率小于diskMaxUsedSpaceRatio 表示磁盘使用正常
jvm环境的user.home变量值 通过 java -XshowSettings:all -version 查看 rocketmq的日志路径是以该user.home变量为基准的,配置在logback配置文件里。 /root/logs/rocketmqlogs ? ?存储日志路径 /root/store ? ?存储数据文件路径 storePathRootDir=/opt/rocketmq/rocketmq-all-4.7.0-bin-release/store storePathCommitLog=/opt/rocketmq/rocketmq-all-4.7.0-bin-release/store/commitlog storePathConsumeQueue=/opt/rocketmq/rocketmq-all-4.7.0-bin-release/store/consumequeue storePathIndex=/opt/rocketmq/rocketmq-all-4.7.0-bin-release/store/index storeCheckpoint=/opt/rocketmq/rocketmq-all-4.7.0-bin-release/store/checkpoint abortFile=/opt/rocketmq/rocketmq-all-4.7.0-bin-release/store/abort
rockermq-console启动,用于查看rocketmq 集群相关信息: java -jar D:\a\1tools\rocketmq-externals-master\rocketmq-console\target\rocketmq-console-ng-1.0.1.jar ? ? ? ?即可 启动之前需要配置 D:\a\1tools\rocketmq-externals-master\rocketmq-console\src\main\resources\application.properties ? ,将nameserver的IP和端口配置进去。
三、windows环境
windows环境拉起nameserver和broker? start mqnamesrv.cmd mqbroker -n localhost:9876 autoCreateTopicEnable=true
1、producer生成时候设置的失败重试次数是生效的,只不过是在具体规定的超时时间内完成所有重试,如果未完成,会返回超时异常。 2、采用java接口创建topic,则在首次向该topic发送消息的时候,消费者消费到消息的时间很长,需要几十秒,所以要求topic在拉起rocketmq时候用脚本直接创建,在java代码中不做创建。
|