1.centos7源码部署rockermq
- 安装rocketmq需要有jdk和maven环境,这两者的安装就不在这里展示;
- 下载安装包:https://archive.apache.org/dist/rocketmq/4.4.0/rocketmq-all-4.4.0-source-release.zip
- 解压安装包:unzip rocketmq-all-4.4.0-source-release.zip
- 进入目录:cd rocketmq-all-4.4.0
- 编译打包(耗时会比较长,大概20分钟):mvn -Prelease-all -DskipTests clean install -U
- 打包成功后,运行nameserver服务:cd distribution/target/apache-rocketmq && sh bin/mqnamesrv
- 后台启动 nohup sh bin/mqnamesrv & 查看启动日志 tail -f nohup.out
- 启动brokerserver服务 nohup sh bin/mqbroker -n localhost:9876 & 查看启动日志 tail -f nohup.out
- 查看状态 jps,出现NamesrvStartup、BrokerStartup说明启动成功。
注意:启动后过程可能出现内存不足的情况,需要修改nameserver和broker内存,
*找到runserver.sh修改JAVA_OPT:JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
*找到runbroker.sh修改JAVA_OPT:JAVA_OPT="${JAVA_OPT} -server -Xms528m -Xmx528m -Xmn256m"
2.centos7源码部署rockermq控制台
- 解压安装包 unzip rocketmq-externals-master.zip
- 进入目录:cd rocketmq-externals-master
- 修改pom.xml版本号(官方bug): cd rocketmq-console && vim pom.xml 修改为 <rocketmq.version>4.4.0</rocketmq.version>
- 修改application.xml里面的nameserver地址:rocketmq.config.namesrvAddr=127.0.0.1:9876
- 在rocketmq-console目录下编译 mvn clean package -Dmaven.test.skip=true
- 启动 cd target && nohup java -jar rocketmq-console-ng-1.0.0.jar &
- 查看日志 tail -f nohup.out
- 访问ip:8080
3.生产和消费消息重试及处理
生产者重试(异步和sendOneWay下配置无效):
- 本身内部支持重试,默认次数是2次,可以通过producer.setRetryTimeWhenSendFailed(重试次数)进行修改。
- 为了保证消息的唯一性,broker不收到消费者的重复消息,可以为消息设置key值来保证唯一性:
public Message(String topic, String tags, String keys, byte[] body) {
this(topic, tags, keys, 0, body, true); }
消费者重试:
- 消费者默认重试16次,可以配置messageDelayLevel来修改重试的时间间隔。但一般不会重试这么多次,可以在程序上进行人工补偿,重试3次后停止重试,然后记录数据库,发短信通知开发人员或者运营人员。
- 消费重试只针对集群消费方式生效;广播方式不提供失败重试特性,即消费失败后,失败消息不再重试,继续消费新的消息。
- 消费端去重(保证消息幂等性):利用唯一ID标识每条消息,消费成功处理和去重处理通过事务的形式进行保存,每次消费之前都先查一遍,如果存在就说明消费过了直接返回消费成功。去重处理有以下两种方式
*数据库去重表:某个字段使用Message的key做唯一索引
*redis:通过setNX() 的true和false来保证消费是否已经消费