微服务中的本地事务和分布式事务

这个微服务项目终于在8月份上线了,接下来就是修改一些不影响流程的bug了。
我被安排了加事务这个任务,
那么究竟什么是事务呢?
事务:分为本地事务和分布式事务
在这里插入图可能片描述

  本地事务@Transactional(rollbackFor = {Exception.class, RuntimeException.class })
分布式事务@LcnTransaction(propagation = DTXPropagation.REQUIRED)

其实也很简单,区分增删改是否涉及到两个表的数据,注意:查询时是不加事务的!下一步就是区分是本地事务还是分布式事务。
本地事务:多个影响数据的操作,比如新增主表还新增合同表。
分布式事务:跨服务调用,且有影响数据的操作。
在service层的@Override层上加入事务注解就可以
在这里插入图片描述

/**
	 * 新增物流线路,车辆
	 * 
	 * @param env
	 * @param vo
	 * @param lvos
	 * @param cnl  1:保存2:发布
	 * @return
	 * @throws Exception
	 */
	@Transactional(rollbackFor = {Exception.class, RuntimeException.class })
	@Override
	public String insert(ClientEnvironment env, LogisticspublishVO vo, LogisticsvehiclesVO[] lvos, String cnl)
			throws Exception {
		// 系统当前时间
		Date day = new Date();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

给所有模块加完事务注解之后就要开始验证了,验证分布式事务被调用方是否也需要加事务注解。最开始我自己测试的时候报告说不用,后来就打脸了,真疼。
在这里插入图片描述

测试流程:
1,先测试挂牌,第一步改泛接口,防止调到别的服务。接下来改订单中心泛接口
2,先测试正常流程是否能生成订单:
2.1先看euraka是否注册上去,后看txlcn7970本地事务是否注册上去,
测试情况分两种,feign调用之前,

在挂牌生成订单的代码里抛异常
在这里插入图片描述

抓取了挂牌的更新sql,
UPDATE li_listing_transaction li 
SET ts = '2019-08-28 15:28:14',
li.available = '1210.0',
li.used = '24.0',
li.approval_status = 4 
WHERE
	li.id = 'bhwqzbgnqwsa6yv0hjgdqy'

接着,根据id查询挂牌的表
在这里插入图片描述
然后挂牌表查询:可供应量,已供应量,状态并没有改变,证明事务回滚了。
接着看order的insert语句,根据order_id查询是否有订单
在这里插入图片描述
查询订单中心表:为订单中心有数据!事务没有回滚。
在这里插入图片描述
测试说明分布式事务被调用方必须也加分布式事务!哭了
在这里插入图片描述
在order中加上分布式事务后:
在这里插入图片描述
根据order_id查询:
在这里插入图片描述
在这里插入图片描述
查询结果为空,证明事务回滚了。说明订单中心也必须加分布式事务!真棒

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值