为了账号安全,请及时绑定邮箱和手机立即绑定

kafka和mysql操作,如何确保先后顺序

kafka和mysql操作,如何确保先后顺序

慕码人2483693 2019-03-04 17:08:05
问题描述A项目中有一个方法,先将数据保存在mysql中,然后将mysql的插入操作返回数据的id作为消息体,通过kafka发送。(此方法已被@Transactional,所以插入数据和发送消息应该会)B项目收到消息后,从MySQL中查询消息的详情,并进行后续操作。线上部署时,mysql是远程的数据库服务器,而kafka,A项目,B项目部署在同一台服务器。出现一个问题就是,A发送的消息,B项目已经接收,并开始根据消息中的id查询数据库,但是此时,数据库的插入操作还未完成,导致查询结果为空。这种情况下,如何对数据库插入操作和kafka发送消息进行控制,确保,B收到消息时,数据库插入操作已经完成,并且当kafka消息发送失败时,能够正确的回退操作。目前,我的做法是进行手动控制,去掉@Transactional注解,当消息发送出现异常时,手动对之前的数据库插入操作新增的数据进行删除。有没有更优雅的解决方案?
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

@TransactionalEventListener

或者采取本地事件表的方式,将消息写入本地事件表,由轮询线程去处理投递的问题


查看完整回答
反对 回复 2019-03-04
  • 3 回答
  • 0 关注
  • 953 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信