7.21 杭州源创会火热报名中,一起来看看移动开发如何紧跟浪潮?
Watch Star

zhoubang85 / zb-pay-dubboJavaApache-2.0

加入码云
与超过 300 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
以【电商购物支付】作为当前分布式项目的业务功能,通过该项目完整实现并解决分布式服务下的【分布式事务】问题 http://www.2b2b92b.com
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README.md 6.58 KB

:confused: 或许你在网上看过一些资料,了解一些分布式事务的解决办法,然而,一切还只是停留在理论阶段。

:confused: 或许你知道可以通过可靠消息、TCC、最大努力通知等方案来解决分布式事务问题,然而,一切还只是停留在理论阶段。

:confused: 或许你能说出来可以通过一些开源的技术来实现分布式事务,然而,一切还只是停留在理论阶段。

:pensive:    然而,网上都是理论性的文字介绍,文章到处转发、复制,没有项目案例以及代码可供参考学习。即使存在,也是收费!

> 电商购物支付流程图

    1、电商购物支付流程中的分布式事务问题分析

电商购物支付流程中的分布式事务问题分析

    2、电商购物支付流程中的支付结果回调处理流程

电商购物支付流程中的支付结果回调处理流程

> 分布式事务问题的代码场景

分布式事务问题的代码场景

> 分布式事务问题的困扰

分布式事务问题的困扰

> 常见的柔性事务解决方案

    1、可靠消息最终一致(异步确保型)

柔性事务解决方案:可靠消息最终一致(异步确保型)

    2、TCC(两阶段型、补偿型)

TCC(两阶段型、补偿型)

    3、最大努力通知(定期校对)

最大努力通知(定期校对)

【总结】常用的分布式事务解决方案

  • 刚性事务

全局事务(标准的分布式事务)

  • 柔性事务

可靠消息最终一致(异步确何型)

TCC (两阶段型、补偿型)

最大努力通知(非可靠消息、定期校对)

> 项目业务功能说明

以【商城下单支付】为核心功能,业务流转过程中会涉及到各系统之间的服务调用,比如:支付通知、商户通知、订单服务、积分服务、会计服务等。

每个服务之间都是独立的进程,具有可独立部署、业务解耦、扩展性强的特点。

最终,你将会知道如何解决分布式事务的问题。。

> 项目技术选型

- 项目主要采用Dubbo作为服务治理框架

- 采用SpringBoot作为微服务开发框架。服务之间可独立部署、业务解耦、扩展性好。

- 项目整体框架为Spring、SpringMVC、Mybtais、Mysql、Zookeeper、ActiveMQ、Dubbo、JSP、Dwz(富客户端)等。

> 项目功能模块划分

通过模拟真实业务场景,最终通过代码来实现和解决分布式事务,故需要对业务进行拆分,不同的服务拥有属于自己的DB库。
项目功能模块以及系统服务架构划分如下:

01. 在线商城系统

02. 支付网关系统

03. 银行支付通知(模拟通知回调)

04. 订单服务

05. 积分服务

06. 会计原始凭证记账服务

07. 账户服务

08. 商户通知服务

09. 可靠消息服务

10. TCC服务

11. 消息状态确认子系统

12. 消息恢复子系统

13. 消息管理子系统

14. BOSS系统

15. (后续更新)

> 项目结构图

项目Maven结构图-IDEA工具下的效果

> 第三方jar说明

1、将项目拉取到本地之后,可能会出现tcc-transaction相关的jar文件找不到的情况,如下图所示:

tcc-transaction框架

  原因是因为tcc-transaction框架是github上开源的框架,并非maven中央仓库。

  tcc-transaction框架地址:https://github.com/changmingxie/tcc-transaction

  我已经打包好了,可以到https://gitee.com/zhoubang85/zb-pay-dubbo/attach_files中下载,导入到本地maven仓库即可。

> 项目打包与部署(陆续更新)

  为了更加贴近实际企业项目的部署,特写了一份Jenkins项目自动化构建部署的教程,方便大家学习。

Jenkins项目自动化构建部署教程 :https://gitee.com/zhoubang85/zb-pay-dubbo/attach_files

zb-pay-dubbo项目部署文档教程 : https://gitee.com/zhoubang85/zb-pay-dubbo/attach_files

> mysql版本驱动相关问题

由于当前项目是基于mysql5.6版本开发、编译、部署打包的,是没有问题的。
有些朋友使用的是mysql8.0或者其他最新版本,导致在部署启动该项目的时候,会出现连接数据库失败的问题。如果出现这样的情况,可以更换mysql的驱动jar的版本,让驱动jar支持最新mysql版本即可。

项目测试

(后续整理)

> 最新动态

为每一个zb-pay-service-*、zb-pay-app-* 模块新增main方法启动服务的入口,方便本地调试学习与代码跟踪;
建议使用此方式,比较简单直接;直接运行main方法即可使用服务注册;

无需再通过繁琐的 java -jar 的命令启动jar实现服务启动;

> 学习交流

【个人网站】:http://www.2b2b92b.com

【联系QQ】:842324724
【支付-微信_支付宝_银联】技术QQ群:470414533

> 特别的感谢那些为此项目捐赠的朋友,谢谢。

项目点评 ( 67 )

你可以在登录后,发表评论

11_float_left_people 11_float_left_close