当引入MQ后...

当引入MQ后,可能需要考虑这些


保证不丢失消息

生产者

  • ack, 集群内大部分或全部slave都获取到消息
  • 消息发送失败重试次数

存储

  • MQ集群副本
  • 消息保留时间
  • 消息保留大小
  • 消息定时清理

消费者

  • 只有在消费完成后才提交业务

补偿

  • 保存, 在消息写入队列后,同时写入一份到DB,并加入状态字段。
  • 在消费者消费完成并改变状态。
  • 启动定时任务Check失败数据,然后加载失败数据进行重新发送。
  • 重发阀值,重试几次后,认为改消息无法消费,并记录

生产过慢

配置

  • 消息大小
  • 序列号方式
  • ACK模式,是否需要集群内所有slave全部确认

消费过慢

配置

  • 序列化方式
  • MQ是否支持(Peer-to-Peer),即每分区每消费者模式

其他

  • 当前拆封消费者,需要依赖多个服务响应,导致相应时间过长。
  • 代码是否有性能问题

幂等

这个一般是通过在业务层面保证,比如通过唯一id,判断数据是否重复。