消息队列实现分布式事务
在生产阶段,首先给队列发送一个半消息,半消息是一分全量消息,只是在确认之前,不会被消费者发现,第二步实现本地事务,根据本地事务决定队列上的消息提交还是回滚,在本地事务完成之后给队列发送的消息提交发生问题,队列没有收到提交或者回滚的命令,kafka会直接抛出异常让用户自己处理,rocketmq有自己的消息反查机制,它会轮询去查哪些消息还没有得到确认,回去调用户实现的一个反查接口,来处理这条消息的状态。
如何检测消息是否丢失
大部分消息队列都会提供拦截器机制,利用队列的有序性,在拦截器里给每条消息前面加一个自增的标志,在消费是检测标志是否是连续的就可以查出哪条消息丢失了。
对于主题来说,保证不了严格的有序性,那么在传递消息上要设置给那个队列上发送消息,检查这个对应队列的有序性,如果有多个生产者对应一个队列,那么需要带上生产者的标志,检查时检查对应生产者的标志顺序。