分布式事务_01_2PC框架raincat快速体验
一、前言
关于2PC的理论知识请见:分布式_理论_03_2PC
这一节我们来看下github上一个优秀的2PC分布式事务开源框架的快速体验。
二、源码
源码请见:
相关视频
三、接入步骤
1.启动 TxManagerApplication
此工程为分布式事务的协调者
- 配置txManaager, 修改application.properties中你自己的redis配置
- 启动TxManagerApplication
2.引入依赖
在需要进行分布式事务处理的服务的pom.xml中引入如下依赖:
<dependency>
<groupId>com.raincat</groupId>
<artifactId>raincat-springcloud</artifactId>
<version>${your.version}</version>
</dependency>
3.配置文件
(1)新建applicationContext.xml,增加如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"
default-autowire="byName">
<context:component-scan base-package="com.raincat.*"/>
<aop:aspectj-autoproxy expose-proxy="true"/>
<bean id="txTransactionBootstrap" class="com.raincat.core.bootstrap.TxTransactionBootstrap">
<property name="txManagerUrl" value="http://localhost:8761"/>
<property name="serializer" value="kryo"/>
<property name="nettySerializer" value="kryo"/>
<property name="compensationCacheType" value="db"/>
<property name="compensation" value="true"/>
<property name="txDbConfig">
<bean class="com.raincat.common.config.TxDbConfig">
<property name="url"
value="jdbc:mysql://localhost:3306/tx?useUnicode=true&characterEncoding=utf8"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
</property>
</bean>
<!--
<property name="compensationCacheType" value="db"/>
<property name="txDbConfig">
<bean class="com.raincat.common.config.TxDbConfig">
<property name="url"
value="jdbc:mysql://192.168.1.68:3306/alipay?useUnicode=true&characterEncoding=utf8"/>
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="password" value="Wgj@555888"/>
<property name="username" value="xiaoyu"/>
</bean>
</property>
<property name="compensationCacheType" value="redis"/>
<property name="txRedisConfig">
<bean class="com.raincat.common.config.TxRedisConfig">
<property name="hostName"
value="192.168.1.78"/>
<property name="port" value="6379"/>
<property name="password" value=""/>
</bean>
</property>
<property name="compensationCacheType" value="zookeeper"/>
<property name="txZookeeperConfig">
<bean class="com.raincat.common.config.TxZookeeperConfig">
<property name="host" value="192.168.1.132:2181"/>
<property name="sessionTimeOut" value="100000"/>
<property name="rootPath" value="/tx"/>
</bean>
</property>
<property name="compensationCacheType" value="mongodb"/>
<property name="txMongoConfig">
<bean class="com.raincat.common.config.TxMongoConfig">
<property name="mongoDbUrl" value="192.168.1.78:27017"/>
<property name="mongoDbName" value="happylife"/>
<property name="mongoUserName" value="xiaoyu"/>
<property name="mongoUserPwd" value="123456"/>
</bean>
</property>
<property name="compensationCacheType" value="file"/>
<property name="txFileConfig">
<bean class="com.raincat.common.config.TxFileConfig">
<property name="path" value=""/>
<property name="prefix" value="tx"/>
</bean>
</property>
-->
</beans>
将协调者的地址 以及 事务补偿数据库链接配置成正确的
(2)然后在启动类上增加如下注解,以配置生效
@ImportResource({"classpath:applicationContext.xml"})
4.分布式事务处理
在需要进行分布式事务处理的接口上,增加如下注解:
@TxTransaction
四、启动demo示例
作者提供了示例工程,以便使用者能快速体验raincat。
地址见:
1.clone & build
打开git bash 运行如下命令
git clone git@github.com:yu199195/Raincat.git
cd Raincat
mvn -DskipTests clean install -U
2.启动TxManagerApplication
此工程为分布式事务的协调者
- 配置txManaager, 修改application.properties中你自己的redis配置
- 启动TxManagerApplication
3.引入依赖包(sample已经引入)
<dependency>
<groupId>com.raincat</groupId>
<artifactId>raincat-springcloud</artifactId>
<version>${your.version}</version>
</dependency>
4.数据库准备
执行 raincat-springcloud-sample 工程 sql文件 springcloud-sample.sql
5.配置文件
(1)在每个工程下 application.yml 中配置您的数据库连接(只需要改ip和端口)
(2)在每个工程下 applicationContext.xml中的TxDbConfig 配置您的补偿数据库连接,提供单独的数据库来存储。
6. @TxTransaction
在需要做分布式事务的接口上加上注解 @TxTransaction (sample已经加上)
7.启动服务
依次启动
- AliPayApplication
- WechatApplication
- PayApplication
8.体验测试
访问API接口列表,进行体验测试
分布式事务_01_2PC框架raincat快速体验的更多相关文章
- 分布式_事务_01_2PC框架raincat快速体验1
一.前言 关于2PC的理论知识请见:分布式_理论_03_2PC 这一节我们来看下github上一个优秀的2PC分布式事务开源框架的快速体验. 二.源码 源码请见: https://github.com ...
- 分布式事务_03_2PC框架raincat源码解析-事务提交过程
一.前言 前面两节,我们已经将raincat的demo工程启动,并简单分析了下事务协调者与事务参与者的启动过程. 这一节,我们来看下raincat的事务提交过程. 二.事务提交过程概览 1.二阶段对应 ...
- 分布式事务_02_2PC框架raincat源码解析-启动过程
一.前言 上一节已经将raincat demo工程运行起来了,这一节来分析下raincat启动过程的源码 主要包括: 事务协调者启动过程 事务参与者启动过程 二.协调者启动过程 主要就是在启动类中通过 ...
- Hmily:高性能异步分布式事务TCC框架
Hmily框架特性 无缝集成Spring,Spring boot start. 无缝集成Dubbo,SpringCloud,Motan等rpc框架. 多种事务日志的存储方式(redis,mongdb, ...
- 分布式_事务_02_2PC框架raincat源码解析
一.前言 上一节已经将raincat demo工程运行起来了,这一节来分析下raincat的源码 二.协调者启动过程 主要就是在启动类中通过如下代码来启动 netty nettyService.sta ...
- 高性能异步分布式事务TCC框架(资料汇总)
https://github.com/yu199195/hmily tcc源码解析系列(一)之项目结构 https://yu199195.github.io/2017/10/11/TCC/tcc-on ...
- 分布式事务专题笔记(一) 基础概念 与 CAP 理论
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.基础概念 1.什么是事务 什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是 ...
- Album++:分布式事务专辑-基础概念
(一)基础概念:↓ ↓ ↓ 1.1)什么是事务 什么是事务?举个生活中的例子:你去小卖铺买东西,"一手交钱,一手交货"就是一个事务的例子,交钱和交货必 须全部成功, 事务才算成功, ...
- Spring Cloud Alibaba分布式事务组件 seata 详解(小白都能看懂)
一,什么是事务(本地事务)? 指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行. 简单的说,事务就是并发控制的单位,是用户定义的一个操作序列. 而一个逻辑工作单元要成 ...
随机推荐
- oracle修改连接数后无法启动(信号量的问题)
当oracle11g修改最大连接数后启动报如下错误时,需要调整linux的信号量的内核参数: ORA-27154: post/wait create failedCause: internal err ...
- iOS视图生命周期
视图是应用的一个重要组成部分,功能的实现与其息息相关,而视图控制器控制着视图,其重要性在整个应用中不言而喻. 1.视图生命周期与视图控制器关系 以视图的4 种状态为基础,我们来系统了解一下视图控制器的 ...
- 前端基础之jquery_mouse相关操作与不同
jquery中mouse相关操作与不同 mousedown() //当鼠标指针移动到元素上方,并按下鼠标左键时,会发生 mousedown 事件 mouseup() //当鼠标指针移动到元素上方,并松 ...
- Kattis - register 【水】
题意 就是 有一堆容器,然后可以执行加的操作,每个容量是 2, 3, 5, 7, 11, 13, 17, 19 然后 有进位 比如第一个 容器,到2了,就会重置为0,然后 下一个容器+ 1, 但是要保 ...
- Java中ArrayList和LinkedList区别、ArrayList和Vector的区别
一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,Ar ...
- Android下Opengl ES实现单屏幕双眼显示
http://blog.csdn.net/u011371324/article/details/68946779 默认情况下,Opengl ES使用系统提供的帧缓冲区作为绘图表面,一般情况下,如果只在 ...
- 【Flask】Flask-Sqlalchemy使用笔记
### 安装:```shellpip install flask-sqlalchemy``` ### 数据库连接:1. 跟sqlalchemy一样,定义好数据库连接字符串DB_URI.2. 将这个定义 ...
- 摊铺机基本参数介绍(三一重工SSP220C-5)
三一重工SSP220C-5稳定土摊铺机参数 SSP系列稳定土摊铺机SSP220C-5 动力强劲162kw 动力充分满足摊铺机各种工况下动力需求 高效任何工况,确保摊铺能力大于900t/h,行业内绝无仅 ...
- 发送ajax请求实现上传图片显示在网页上
<?php // 1,通过超全局变量来获取files[上传的图片名称] $file = $_FILES["files"] // 2,在通过strrchr来获取图片的格式 $e ...
- UI基础_transform
#import "ViewController.h" typedef enum { ButtonTypeLeft = 1, ButtonTypeRight, ButtonTypeU ...