分布式事务出错

	@Override
	@Transactional(value = "transactionManager_busi", rollbackFor = Exception.class)
	public void buildMerchant4Api(String shopName, String userName, Long userId, String mobile, String email, String idCode) throws PayException {
		try {
			addMerchantUser(shopName, mobile, email, userName, 1, userId, idCode);
		} catch (DuplicateKeyException e) {
			//后台添加了未审核,前台自主认证
//			logger.error("("+userName+")商家已提交过认证,更新信息:", e);
			updateMerchantUser(shopName, mobile, email, userName, 1, userId, idCode);
		}
	}


	@Override
	public void addMerchantUser(String shopName, String mobile, String email, String userName, int verifyTpe,Long userId,String idCard) throws PayException {
		addRegistUser(shopName, mobile, email, userName, verifyTpe, idCard);
		UserRole userRole = verifyTpe == 1 ? new UserRole(userName, UserRole.ROLE_PERSONAL_MERCHANT) : new UserRole(userName, UserRole.ROLE_COMPANY_MERCHANT);
		userRoleRepository.addUserRole(userRole);
		
		if(!merchantVerifyService.initBusPlatUserWallet(userId, verifyTpe == 1? 0:1)){
			throw new PayException("用户("+userName+")初始化商家钱包失败");
		}
		
		if(verifyTpe == 1) {
			//将个人商家放入缓存给IM使用
			redisWebChat.sadd(SELLERS, String.valueOf(userId));
			redisWebChat.hset(SELLER_TYPE, String.valueOf(userId), "1");
			redisWebChat.sadd(MERCHANT_WAITERS.replace("MerchantUserId", String.valueOf(userId)), String.valueOf(userId));
			//删除商家标签的缓存,enterprise系统getTags接口读取
			redisUtil.del("merchant_tags_" + userId);			
		}
		
//		setMerchant(userName);
	}

==============================

@Transactional(value = "transactionManager_busi", rollbackFor = Exception.class) 

影响的是busi_plat库

userRoleRepository 

操作的是HYIP库

if(!merchantVerifyService.initBusPlatUserWallet(userId, verifyTpe == 1? 0:1)){  

远程调用支付的接口

BUG

@Transactional(value = "transactionManager_busi", rollbackFor = Exception.class) 只能控制busi_plat库,不能控制HYIP库,当远程调用失败时,HYIP库的事务已经提交,但是busi_plat库的操作回滚了,导致出现了数据不一致的情况

解决办法

1 加入补救措施(DB操作比远程调用更加靠谱)

  在调用支付接口失败时,手动把HYIP库的数据回滚掉(此回滚存在失败的可能) ,防止出现数据不一致的

    



 

2 分布式事务

猜你喜欢

转载自curious.iteye.com/blog/2299193