消息发送端
1.生成消息唯一幂等ID ->存储消息参数
2.在本服务内实现监听(JPA entity postPersist),更新实体物化视图。
3.–>异步投递到MQ–>更新是否投递标致为true
4.如果投递MQ失败,重试机制。
5.定期扫描投递标致为false的数据,再次发送
消息接受端
1.存储消息参数和消息的幂等ID,为后续幂等做判断依据。
2.判断消息里面的sequenceNumber(事件序列)和本地实体聚合的事件处理记录的对比,只消费差异值为 1 的事件 (保障事件顺序一致性)
(如果本地实体聚合的事件处理记表量大,可以使用分表等技术)
(可以使用kafka分区技术,提高消息处理并发量)
2.处理消息–>回写MQ的 ACK
3.如果失败放失败队列deadLetterQueueName
4.定时任务/或者重启时,处理这个DLQ里面的消息