SEND_OK:消息正常发送成功
FLUSH_DISK_TIMEOUT:没有在规定的时间内完成刷盘,这种状态在同步刷盘中会出现,假设请求进来,先同步内存,在同步磁盘,同步时间设置了3秒,在规定时间内没有完成,就会返回这种状态,异步刷盘不会,内存同步完后直接就返回成功了
FLUSH_SLAVE_TIMEOUT :在主从模式下才会会出现这种状态,假设CUP爆满,主从节点来不及同步.
SLAVE_NOT_AVAILABLE : 在从模式下,brokey是YNC_MASTER,同步双写,但如果从节点宕机了,主节点没有找到配置的从节点,返回这种状态.
2:生产和消费的重试机制:
product方发送到broker时,由于broker宕机了或者网络情况比较差的时候,进行重入机制,
consumer去broker拉取消息的时候,或者处理完后返回状态时,broker宕机了进入重试机制
product默认重试机制为2
设置重试次数
defaultMQProducer.setRetryTimesWhenSendFailed(0);
comsumer 端重试机制
int reconsumeTimes = messageExt.getReconsumeTimes();
判断重试几次后不再重试,
1 消费端重试可能消息会被重复消费,这个可以通过代码去判断,比如把keys保存到redis中,设置过期时间,消费时去判断是否被消费过
2 一条消息无论被重试多少次,这些重试的消息的MassageID ,key都不会变的
3 消费者集群只针对即系消费方式有效的,广播方式不提供失败重试的特性,失败后不进行消息重试,继续消费新的消息
defaultMQPushConsumer.setMessageModel(MessageModel.BROADCASTING);