赞
踩
RocketMQ的消息存在重发机制,如果消费者没有收到消息,那么RocketMQ会规定一段时间之后再把消息重新推送一遍,默认是重发16次。如果16次后消费者依然没有收到消息那么就会认定消息发送失败,这时消息就会进入我们的死信队列。注意广播消息并不会重试。
重发的时间间隔是按照时间延迟级别得来的,重发时间依次变更,如下所示,第一次是1s,第二次是5s…最后是2h,如果超过最大级别那么默认后面都是最大级别
如果消费者返回的是如下返回值,那么RocketMQ就会开启重试,知道返回成功标志
在消费者我们可以得到当前的重试次数
我们可以更改上面的重试时间,打开配置文件
通过messageDelayLevel参数配置延迟级别(时间)
对于RocketMQ的其他参数我们可以在官网中查阅
https://rocketmq.apache.org/docs/rmq-deployment/
我们还可以配置重试次数,不过需要注意的是这里的重试次数是相对于消费者来说独立的,每个消费者可以有不同的重试次数,不过因为一旦发生重试消息就会重新在RocketMQ中推送,对于重试消息只会存在与队列0(第一个队列)中。因为每个消费者消费的队列是不同的(同一组消费者且配置的集群模式),那么所有重试消息都只会被某一个消费者(被分配消费的队列0)消费,而重试次数也只会按照这个消费者设置的来。
上面说了如果消息经过重试依然没有被成功消费,那么消息就会进入死信队列,死信队列的队列名是根据消费者组的组名命名的。
而且一个topic中只有存在过死信消息才会出现死信队列。
下面就是死信队列,其中perm默认是2,就是不能读,6就是可读可写,如果我们需要读取死信队列中的消息,那么需要在控制台中将这个队列的perm属性设置为6。
消费死信队列,首先通过上面的操作更改读取权限,同样是通过topic名来消费
一般情况下RocketMQ的集群架构如下:
对于不同的RocketMQ集群来说,一般区别只在于broker集群的搭建,存在三种搭建方式:
对于第三种多master多slave模式的集群来说还需要考虑复制方式和刷盘方式,首先需要介绍复制和刷盘这两个概念。
这个概念很简单,就是主机接收生产者发送过来的消息,然后将消息同步到从机中,RocketMQ提供了两种复制模式:
刷盘就是将内存中的数据持久化到磁盘中,同样RocketMQ也提供了两种刷盘方式:
在生产环境下一般会采用多master多slave模型的集群,配置上则采用同步复制加上异步刷盘。
这种模式下性能较高,当所有主机宕机了,生产者就无法工作了,但是只要有一个broker没有宕机,消费者依然可以工作。
一般会采用下面这种方式部署RocketMQ,2主2从
在conf文件夹中RocketMQ也给我们提供了三种集群模式的配置文件,其中下面框出来的就是2主2从并且采用同步复制
下面就是每一个borker的配置,对于一个borker集群来说,只要brokerClusterName配置的是一样的就行了
# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # 集群搭建教程地址:https://www.jianshu.com/p/23e04d8178b8 brokerClusterName=sns-rocket-mq-cluster #broker名字,注意此处不同的配置文件填写的不一样 brokerName=rocketmq-nameserver-1 #brokerId 0 表示 Master,>0 表示 Slave brokerId=0 # Broker 对外服务的监听端口 listenPort=10911 #nameServer地址,分号分割 # rocketmq-nameserver-1 :改成自己的nameserver地址 namesrvAddr=rocketmq-nameserver-1:9876;rocketmq-nameserver-2:9876 # 删除文件时间点,默认凌晨 4点 deleteWhen=04 #文件保留时间,默认 48 小时 fileReservedTime=72 #Broker role有3种:SYNC MASTER、ASYNC MASTER、SLAVE。关键词SYNC和ASYNC表示Master和Slave之间同步消息的机制,SYNC即同步更新,指当Slave和Master消息同步完成后,再返回发送成功的状态。ASYNC即异步更新,master与slave有短暂消息延迟,毫秒级。本文在此使用了异步复制集群模式,线上环境推荐使用同步双写模式,即SYNC_MASTER brokerRole=ASYNC_MASTER # 刷盘方式 ASYNC_FLUSH 异步刷盘 flushDiskType=ASYNC_FLUSH #存储路径 storePathRootDir=/data/rocketmq/store/rootdir-a-m storePathCommitLog=/data/rocketmq/store/commitlog-a-m # 是否允许 Broker 自动创建Topic autoCreateTopicEnable=true # 是否允许 Broker 自动创建订阅组 autoCreateSubscriptionGroup=true
下面是配置的主从复制和刷盘的方式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。