文档章节

分布式服务-DUBBOX(八):单一服务下事务配置

w
 warlockssss
发布于 2016/12/08 15:34
字数 452
阅读 51
收藏 2

1、概述

    工程调用流程:服务生产者=>Service层=>Dao层。

    在“消费层”只进行“单一”服务调用时,可暂时不用考虑“分布式”事务问题。此情形下事务还是使用Spring注解事务,只要考虑事务是配置在“服务生产者”还是“Service层”。

 

2、事务配置Service层测试

0)controller层:UserController

    @RequestMapping("addUser")
    @ResponseBody
    public Boolean addUser(String name,@DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday) throws Exception{
        if(StringUtils.isEmpty(name))
            throw new DemoException("前置参数name为空");

        return userApi.add(name,birthday);
    }

1)dubbo接口:UserApi.java

    Boolean add(String name,Date birthday) throws Exception;

2)dubbo接口实现-服务生产者:UserApiImpl.java

  //@Transactional(rollbackFor = Exception.class)
    @Override
    public Boolean add(String name, Date birthday) throws Exception {
        try {
            User user = new User();
            user.setName(name);
            user.setBirthday(birthday);
            return userService.add(user);
        }catch (DemoException e){
            LOGGER.error("添加用户异常",e);
            throw new Exception("添加用户异常",e);
        }

    }

3)Service层:UserService.java

@Transactional(rollbackFor = DemoException.class)
    public Boolean add(User user) throws DemoException{
        int count = userDao.add(user);

        if(count != 1){
            throw new DemoException("数据库更新不为1");
        }

        LOGGER.info("新增user主键id=>{}",user.getId());

        if(1 == 1) {
            throw new DemoException("测试事务事务是否回滚");
        }
        return true;
    }

说明:注解事务中回滚默认是RuntimeException,DemoException并非RuntimeException,所以需要在rollbackFor 。

4)测试结果

http://localhost:8086/demo-consumer/user/addUser.do?name=wsy&birthday=2011-11-11

页面显示如下:

数据库表无对应记录

即事务配置生效,数据回滚。

 

3、事务配置在服务生产者

把UserApiImpl.java中注解事务放开,注释UserService中事务配置。

测试结果:即事务配置生效,数据回滚。

 

补充说明:在有些dubbo版本中,如果事务配置在服务生产者,会有各种问题出现。

工程中dubbo版本是从https://github.com/dangdangdotcom/dubbox下载源码重新编译,已没此问题。

© 著作权归作者所有

共有 人打赏支持
w
粉丝 13
博文 73
码字总数 23039
作品 0
宝山
私信 提问
binux/xbin-store

xbin-store 模仿国内知名B2C网站,实现的一个分布式B2C商城 进群讨论 群 626068936 Dubbox 版本: GitHub 地址 : https://github.com/xubinux/xbin-store OSChina 地址 : http://git.oschina.n......

binux
2017/04/06
0
0
dubbox粗记

一直在用dubbo2.5。今天花了一天时间研究了当当网的dubbox项目并在本地运行,粗略记录一下认识。 dubbox的主要升级点: 1、dubbox弥补了dubbo中没有REST框架的不足,但REST性能指标比RPC要差...

Jim_Ai
2016/07/18
1K
3
分布式RPC服务框架--rpcx

rpcx是一个类似阿里巴巴 Dubbo 和微博 Motan 的分布式的RPC服务框架,基于Golang net/rpc实现。 与gRPC比较,完胜gRPC, 更不用说其它的"老"的RPC框架了。 谈起分布式的RPC框架,比较出名的是...

匿名
2017/01/31
6.1K
7
分布式服务-DUBBOX(九):多服务串行调用,解决分布式事务问题

1、概述 情景描述: dubbo服务A:支付接口服务 dubbo服务B:订单状态更新 正常流程,首先调用支付接口,支付成功后,再调用dubbo服务B更新订单状态;但是如果在调用dubbo服务B时失败,此时d...

warlockssss
2016/12/15
141
2
Dubbo详细介绍与安装使用过程

1 Dubbo介绍 1.1 dubbox简介 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进...

monroeCode
2017/10/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ConcurrentHashMap 高并发性的实现机制

ConcurrentHashMap 的结构分析 为了更好的理解 ConcurrentHashMap 高并发的具体实现,让我们先探索它的结构模型。 ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEnt...

TonyStarkSir
今天
3
0
大数据教程(7.4)HDFS的java客户端API(流处理方式)

博主上一篇博客分享了namenode和datanode的工作原理,本章节将继前面的HDFS的java客户端简单API后深度讲述HDFS流处理API。 场景:博主前面的文章介绍过HDFS上存的大文件会成不同的块存储在不...

em_aaron
昨天
2
0
聊聊storm的window trigger

序 本文主要研究一下storm的window trigger WindowTridentProcessor.prepare storm-core-1.2.2-sources.jar!/org/apache/storm/trident/windowing/WindowTridentProcessor.java public v......

go4it
昨天
6
0
CentOS 生产环境配置

初始配置 对于一般配置来说,不需要安装 epel-release 仓库,本文主要在于希望跟随 RHEL 的配置流程,紧跟红帽公司对于服务器的配置说明。 # yum update 安装 centos-release-scl # yum ins...

clin003
昨天
9
0
GPON网络故障处理手册

导读 为了方便广大网络工作者工作需要,特搜集以下GPON网络处理流程供大家学习参考。开始—初步定为故障—检查光纤状况—检查ONU状态--检查设备运行状态—检查设备数据配置—检查上层设备状态...

问题终结者
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部