我们需要知道rocketMq哪些场景会导致消息丢失;
生产者在发送消息的时候,如果断网了就会导致消息发送失败
这种极端情况下,我们可以采用rocketMq的事务机制来解决;
首先生产者在发送数据前会发送一个half消息给rocketMq,看是否能和rocketMq建立连接,如果发送失败了则执行回滚逻辑
如果发送成功,且RocketMQ返回成功响应,则执行生产者的核心链路
如果生产者自己的核心链路执行失败,则回滚,并通知RocketMQ删除half消息
如果生产者的核心链路执行成功,则通知RocketMQ commit half消息,让消费者可以消费这条数据
rocketMq 消息写入内存队列,还未来的及持久化,集群崩了
rocketMq默认是异步刷盘的机制,若要保证消息不丢失则要采用同步的方式,需要修改Broker的配置文件,将flushDiskType改为SYNC_FLUSH同步刷盘策略;
消费方异步消费,消息还没消费完,就通知生产者消费成功
可以在消费者中注册一个监听器,当消费者获取到了消息时,就会触发这个回调函数处理这个消息,消息处理完毕后才会返回rocketMq消费成功的标识