148 Star 736 Fork 444

kinbug / match-trade

 / 详情

关于异常撮合逻辑的处理

待办的
创建于  
2020-06-09 23:46

作者,你好,首先非常感谢你开源代码,这里有个疑问需要咨询下你,MatchExecutor.doMatch 中,其实是你核心的撮合逻辑,其中如果中间出现问题,如何保证数据的一致性呢? 比如代码中在撮合一笔成功后会发送一条撮合记录mq ( matchDetailHandler.sendTradeRecord) , 但是如果在之后的代码逻辑中出现问题,比如系统突然挂掉,导致从outMap中并没有移除对应的对手单,这会不会有问题呢?

评论 (5)

Oschina312 创建了任务
Oschina312 关联仓库设置为kinbug/match-trade
展开全部操作日志

价格撮合就是会出现类似的问题,所以要采用价格撮合的话,就必须有消息消费完回执,再消费下一个消息,如果出了问题,就的有日志对账系统,根据日志做数据补偿机制。这也是采用价格撮合提升性能的最大弊端。

比如交易走到out处理了,挂了,就处理out中的数据处理。如果在matchHandler中就挂了,直接重发mq消息好了。当然处理的方案比较多。
就像订单薄撮合,你在撮合后,没发出去交易记录一样,也得监听补发消息。

比如交易走到out处理了,挂了,就处理out中的数据处理。如果在matchHandler中就挂了,直接重发mq消息好了。当然处理的方案比较多。
就像订单薄撮合,你在撮合后,没发出去交易记录一样,也得监听补发消息。

@kinbug 看了你的回复,其实说的还是比较笼统,代码上能有提现吗? 我这边没想到什么好的方案,麻烦不吝赐教

比如交易走到out处理了,挂了,就处理out中的数据处理。如果在matchHandler中就挂了,直接重发mq消息好了。当然处理的方案比较多。
就像订单薄撮合,你在撮合后,没发出去交易记录一样,也得监听补发消息。

@kinbug 我们可以拿一个场景来说,输入图片说明 就没有做响应的补偿

这个你用rocketmq事务发生消息的方法吧,这版代码是木有的

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
538536 flying cattle 1578927009
Java
1
https://gitee.com/flying-cattle/match-trade.git
git@gitee.com:flying-cattle/match-trade.git
flying-cattle
match-trade
match-trade

搜索帮助