文档章节

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

w
 warlockssss
发布于 2016/12/08 15:34
字数 452
阅读 45
收藏 2
点赞 0
评论 0

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
博文 69
码字总数 22856
作品 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

dubbox粗记

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

Jim_Ai ⋅ 2016/07/18 ⋅ 3

分布式RPC服务框架--rpcx

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

匿名 ⋅ 2017/01/31 ⋅ 7

分布式服务-DUBBOX(九):多服务串行调用,解决分布式事务问题

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

warlockssss ⋅ 2016/12/15 ⋅ 2

Dubbo详细介绍与安装使用过程

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

庞陆阳 ⋅ 2016/12/21 ⋅ 0

谈谈分布式事务之一:SOA需要怎样的事务控制方式

在一个基于SOA架构的分布式系统体系中,服务(Service)成为了基本的功能提供单元,无论与业务流程无关的基础功能,还是具体的业务逻辑,均实现在相应的服务之中。服务对外提供统一的接口,服...

长平狐 ⋅ 2012/09/04 ⋅ 0

分布式框架-Dubbox介绍

Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的...

孙小哲 ⋅ 2016/01/20 ⋅ 0

DUBBO

dubbo是分布式服务框架使用dubbo进行远程服务交互,它支持多种协议,如Hessian、HTTP、RMI、Memcached、Redis、Thrift等等。由于Dubbo将这些协议的实现进行了封装了,无论是服务端(开发服务...

小墨雨 ⋅ 2016/07/24 ⋅ 0

一年走向【Java架构师】之葵花宝典

大多数时候,不是我们不努力,而是不知从何下手,我深知一份好的学习资料是多么的重要,我们通常会把大量的时间都浪费在找资源上,本人搜集学习java架构师的经典学习路线如下可供参考!!! 一...

我一路狂奔 ⋅ 2017/05/20 ⋅ 1

分布式服务-DUBBOX(一):编译打包

1、概述 dubbo-阿里巴巴开源的分布式服务框架,现已停止维护。 dubbox-当当根据自身需求,在dubbo新增一些新功能,将其名为dubbox(Dubbo eXtensions)。 2、编译、打包并上传到私库(dubbo-2....

warlockssss ⋅ 2016/11/28 ⋅ 3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 24分钟前 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 36分钟前 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

Docker Toolbox Looks like something went wrong

Docker Toolbox 重新安装后提示错误:Looks like something went wrong in step ´Checking if machine default exists´ 控制面板-->程序与应用-->启用或关闭windows功能:找到Hyper-V,如果处......

随你疯 ⋅ 今天 ⋅ 0

Guacamole 远程桌面

本文将Apache的guacamole服务的部署和应用,http://guacamole.apache.org/doc/gug/ 该链接下有全部相关知识的英文文档,如果水平ok,可以去这里仔细查看。 一、简介 Apache Guacamole 是无客...

千里明月 ⋅ 今天 ⋅ 0

nagios 安装

Nagios简介:监控网络并排除网络故障的工具:nagios,Ntop,OpenVAS,OCS,OSSIM等开源监控工具。 可以实现对网络上的服务器进行全面的监控,包括服务(apache、mysql、ntp、ftp、disk、qmail和h...

寰宇01 ⋅ 今天 ⋅ 0

AngularDart注意事项

默认情况下创建Dart项目应出现以下列表: 有时会因为不知明的原因导致列表项缺失: 此时可以通过以下步骤解决: 1.创建项目涉及到的包:stagehand 2.执行pub global activate stagehand或pub...

scooplol ⋅ 今天 ⋅ 0

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部