当引入MQ后,可能需要考虑这些
保证不丢失消息
生产者
- ack, 集群内大部分或全部slave都获取到消息
- 消息发送失败重试次数
存储
- MQ集群副本
- 消息保留时间
- 消息保留大小
- 消息定时清理
消费者
- 只有在消费完成后才提交业务
补偿
- 保存, 在消息写入队列后,同时写入一份到DB,并加入状态字段。
- 在消费者消费完成并改变状态。
- 启动定时任务Check失败数据,然后加载失败数据进行重新发送。
- 重发阀值,重试几次后,认为改消息无法消费,并记录
生产过慢
配置
- 消息大小
- 序列号方式
- ACK模式,是否需要集群内所有slave全部确认
消费过慢
配置
- 序列化方式
- MQ是否支持(Peer-to-Peer),即每分区每消费者模式
其他
- 当前拆封消费者,需要依赖多个服务响应,导致相应时间过长。
- 代码是否有性能问题
幂等
这个一般是通过在业务层面保证,比如通过唯一id,判断数据是否重复。