分布式_事务_01_2PC框架raincat快速体验1
一、前言
关于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.体验测试
访问http://localhost:8881/pay-service/swagger-ui.html 进行体验测试
分布式_事务_01_2PC框架raincat快速体验1的更多相关文章
- 分布式事务_01_2PC框架raincat快速体验
		一.前言 关于2PC的理论知识请见:分布式_理论_03_2PC 这一节我们来看下github上一个优秀的2PC分布式事务开源框架的快速体验. 二.源码 源码请见: https://github.com ... 
- 分布式_事务_02_2PC框架raincat源码解析
		一.前言 上一节已经将raincat demo工程运行起来了,这一节来分析下raincat的源码 二.协调者启动过程 主要就是在启动类中通过如下代码来启动 netty nettyService.sta ... 
- 分布式事务_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, ... 
- Django之Django快速体验
		Django快速体验 前语: 这一节内容是直接快速上手,后面的内容是对内容进行按步解释,如果不想看解析的,可以直接只看这一节的内容. 1.新建项目应用新建项目test1新建应用booktest 2.注 ... 
- Jmeter压测快速体验
		前言 最近在看neo4j相关的官网文档以及一些调优参数,同时也学了下Jmeter,为了测试下neo4j服务的性能,虽然不是专业搞测试的,但是我觉得每个优秀的开发者都应该学会主动压测自己服务和代码的性能 ... 
- 快速体验Spring Boot了解使用、运行和打包 | SpringBoot 2.7.2学习系列
		SpringBoot 2.7.2 学习系列,本节内容快速体验Spring Boot,带大家了解它的基本使用.运行和打包. Spring Boot 基于 Spring 框架,底层离不开 IoC.AoP ... 
- 开源分享 Unity3d客户端与C#分布式服务端游戏框架
		很久之前,在博客园写了一篇文章,<分布式网游server的一些想法语言和平台的选择>,当时就有了用C#做网游服务端的想法.写了个Unity3d客户端分布式服务端框架,最近发布了1.0版本, ... 
随机推荐
- (4.19)深入理解SQLSERVER的日志链
			您真的理解了SQLSERVER的日志链了吗? 转自:https://www.cnblogs.com/lyhabc/p/3460272.html 先感谢宋沄剑给本人指点迷津,还有郭忠辉童鞋今天在QQ群里 ... 
- vue 基础核心学习
			<html> <body> <div id="app"> {{ message }} </div> <div id=" ... 
- 使用Kotlin开发Android应用(II):创建新工程
			在基本了解什么是Kotlin以及Kotlin可以做什么之后,接下来就到了配置Android Studio并使用Kotlin开发Android apps的时候了.首次配置Android Studio需要 ... 
- Eclipse中执行maven命令(转载)
			转载自:http://blog.csdn.net/u011939453/article/details/43017865 1.如下图,右击需要执行maven命令的工程,选择"Debug As ... 
- Quartz使用总结(转发:http://www.cnblogs.com/drift-ice/p/3817269.html)
			Quartz可以用来做什么? Quartz是一个任务调度框架.比如你遇到这样的问题 想每月25号,信用卡自动还款 想每年4月1日自己给当年暗恋女神发一封匿名贺卡 想每隔1小时,备份一下自己的爱情动作片 ... 
- 运维角度浅谈MySQL数据库优化
			一个成熟的数据库架构并不是一开始设计就具备高可用.高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善.这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案,暂且抛开前端应用不说,大致分 ... 
- [转] - 学习ASP.NET比较完整的流程!
			如果你已经有较多的面向对象开发经验,跳过以下这两步: 第一步 掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET. ASP.N ... 
- windows下载Mysql-python
			Mysql-python第三方模块官方不支持windows系统,而国外大学提供了非官方 的支持windows系统的模块,可前往 https://www.lfd.uci.edu/~gohlke/pyth ... 
- Struts2笔记04——Hello World Example(转)
			原文地址:https://www.tutorialspoint.com/struts_2/ [注释]项目结构,次序估计有误 通过学习Struts2的架构,我们可以知道,在Struts2 web应用中, ... 
- 【Head First Servlets and JSP】迷你MVC:JarDownload的完整实现
			1.首先,写一个download.html放至D:\apache-tomcat-7.0.77\webapps\JarDownload-v1. <!DOCTYPE HTML> <htm ... 
