a系统给b系统转100块钱,如如何实现?

1a系统给b系统转100块钱,如如何实现?从三个方面: 数据如何保证一致性,性能优化,cas锁

在这里插入图片描述
设置数据库连接只有两个。
买完商品之后,调用第三方发货。
当有两个商品发货时,还有人在调用查询商品的接口,就会报500===》 没有而外的数据库连接了。

1.1 数据的一致性

加了transaction注解,保证了数据的一致性。

虽然加了transaction注解,保证了数据的一致性。但是大大消耗了性能问题:调用其他系统消耗时间太多,导致其他调用不了接口。
在这里插入图片描述

1.2 性能优化:

编程式事务
通过transactionTemplate控制事务的代码块。
给某些片段加事务。最耗费时间的调用第三方接口的地方,并没有事务,不占用数据库连接。其他地方几乎不耗费时间。
在这里插入图片描述
调第三方系统之前,吧用户的递交信息先保存起来:正在处理中。
当物流系统的接口挂掉,她的信息状态仍然时正在处理中。
当第二天物流系统的接口好了之后,任务调度自动查询一下 因为服务挂掉而失败的,重新调用。不用用户重复调用。减轻了用户的工作量。
所以在用户调用第三方系统之前,很有必要吧状态先保存下来。

1.3 多个线程访问时,保证数据的幂等性

调用第三方系统时,重复调用了6次,相当于6个线程访问。==》 一个物品发货6次,显然时不正确的,造成了重复发货。没有保证数据的幂等性。

解决;用锁的机制保证
在这里插入图片描述
在这里插入图片描述

解释:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值