All Projects → songxinjianqwe → Eshop Soa

songxinjianqwe / Eshop Soa

EShop基于Dubbo实现SOA服务化拆分,并基于RocketMQ解决了分布式事务(新版SpringBootSOASkeleton)

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Eshop Soa

Springbootunity
rabbitmq、redis、scheduled、socket、mongodb、Swagger2、spring data jpa、Thymeleaf、freemarker etc. (muti module spring boot project) (with spring boot framework,different bussiness scence with different technology。)
Stars: ✭ 845 (+1200%)
Mutual labels:  swagger, lombok, mybatis, redis, spring-boot, spring, spring-mvc, thymeleaf
Spring Boot Demo
spring boot demo 是一个Spring Boot、Spring Cloud的项目示例,根据市场主流的后端技术,共集成了30+个demo,未来将持续更新。该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户密码设计)、actuator(服务监控)、cloud-config(配置中心)、cloud-gateway(服务网关)等模块
Stars: ✭ 323 (+396.92%)
Mutual labels:  mybatis, redis, spring-boot, spring, spring-mvc, spring-security, aop
Ibase4j
Spring,SpringBoot 2.0,SpringMVC,Mybatis,mybatis-plus,motan/dubbo分布式,Redis缓存,Shiro权限管理,Spring-Session单点登录,Quartz分布式集群调度,Restful服务,QQ/微信登录,App token登录,微信/支付宝支付;日期转换、数据类型转换、序列化、汉字转拼音、身份证号码验证、数字转人民币、发送短信、发送邮件、加密解密、图片处理、excel导入导出、FTP/SFTP/fastDFS上传下载、二维码、XML读写、高精度计算、系统配置工具类等等。
Stars: ✭ 1,548 (+2281.54%)
Mutual labels:  dubbo, mybatis, redis, spring-boot, spring, spring-mvc, aop
Zheng
基于Spring+SpringMVC+Mybatis分布式敏捷开发系统架构,提供整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、支付中心、用户管理(支持第三方登录)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务治理、监控和追踪,努力为中小型企业打造全方位J2EE企业级开发解决方案。
Stars: ✭ 16,163 (+24766.15%)
Mutual labels:  dubbo, zookeeper, mybatis, redis, druid, spring, mybatis-generator
Highdsa
2018年本科毕设项目,已更新所有开发和部署文档。基于Dubbo、SSM、Shiro、ELK、ActiveMQ、Redis等实现的一套高可用、高性能、高可扩展的分布式系统架构,实现可支持业务的基础公共服务,API使用Restful风格对外暴露。已经实现的包括:发送邮件服务、FastDFS文件存储服务、ELK实时日志查询服务、Redis缓存服务、Mybatis数据库、阿里短信推送、Goeasy消息推送、Druid监控、ActiveMQ消息队列、shiro权限认证、cas单点登录、权限配置web系统、移动端后台系统。持续更新中......
Stars: ✭ 385 (+492.31%)
Mutual labels:  dubbo, zookeeper, mybatis, redis, druid, spring, spring-mvc
Whatsmars
Java生态研究(Spring Boot + Redis + Dubbo + RocketMQ + Elasticsearch)🔥🔥🔥🔥🔥
Stars: ✭ 1,389 (+2036.92%)
Mutual labels:  dubbo, zookeeper, redis, spring-boot, spring, spring-mvc, rocketmq
Springboot Templates
springboot和dubbo、netty的集成,redis mongodb的nosql模板, kafka rocketmq rabbit的MQ模板, solr solrcloud elasticsearch查询引擎
Stars: ✭ 100 (+53.85%)
Mutual labels:  swagger, dubbo, zookeeper, mybatis, redis, spring-boot, rocketmq
Jeeplatform
一款企业信息化开发基础平台,拟集成OA(办公自动化)、CMS(内容管理系统)等企业系统的通用业务功能 JeePlatform项目是一款以SpringBoot为核心框架,集ORM框架Mybatis,Web层框架SpringMVC和多种开源组件框架而成的一款通用基础平台,代码已经捐赠给开源中国社区
Stars: ✭ 1,285 (+1876.92%)
Mutual labels:  dubbo, zookeeper, mybatis, redis, druid, aop, thymeleaf
Milkomeda
Spring extend componets which build from experience of bussiness, let developers to develop with Spring Boot as fast as possible.(基于Spring生态打造的一系列来自业务上的快速开发模块集合。)
Stars: ✭ 117 (+80%)
Mutual labels:  zookeeper, mybatis, redis, spring-boot, spring, jwt, spring-security
Spring Boot Quick
🌿 基于springboot的快速学习示例,整合自己遇到的开源框架,如:rabbitmq(延迟队列)、Kafka、jpa、redies、oauth2、swagger、jsp、docker、spring-batch、异常处理、日志输出、多模块开发、多环境打包、缓存cache、爬虫、jwt、GraphQL、dubbo、zookeeper和Async等等📌
Stars: ✭ 1,819 (+2698.46%)
Mutual labels:  swagger, dubbo, mybatis, redis, druid, spring-boot, jwt
Hope Boot
🌱 Hope-Boot 一款现代化的脚手架项目
Stars: ✭ 3,241 (+4886.15%)
Mutual labels:  swagger, mybatis, redis, druid, spring-boot, thymeleaf
X Admin
致力于快速开发中小型后台管理系统项目模板(更新中......)
Stars: ✭ 123 (+89.23%)
Mutual labels:  dubbo, lombok, zookeeper, redis, druid, jwt
Superman
Superman是什么:构建Java 高级开发技术的知识体系,从基础不断打怪升级成为超人之路(更新中.......)
Stars: ✭ 106 (+63.08%)
Mutual labels:  dubbo, zookeeper, mybatis, redis, spring-boot, spring
Meetingfilm
基于微服务架构的在线电影购票平台
Stars: ✭ 149 (+129.23%)
Mutual labels:  dubbo, lombok, zookeeper, redis, spring-boot, spring-mvc
Spring Boot
spring-boot 项目实践总结
Stars: ✭ 989 (+1421.54%)
Mutual labels:  swagger, mybatis, redis, spring-boot, spring, aop
Javaquarkbbs
基于Spring Boot实现的一个简易的Java社区
Stars: ✭ 755 (+1061.54%)
Mutual labels:  swagger, redis, spring-boot, spring, spring-mvc, thymeleaf
Spring Boot Examples
个人学习 SpringBoot2.x 写的一些示例程序,目前正在持续更新中.....
Stars: ✭ 159 (+144.62%)
Mutual labels:  swagger, mybatis, redis, spring-boot, jwt, thymeleaf
Spring Boot Leaning
Spring Boot 2.X 最全课程代码
Stars: ✭ 2,008 (+2989.23%)
Mutual labels:  swagger, mybatis, redis, druid, spring-boot, thymeleaf
Springboot Learn
🌹springboot常用框架整合示例,涉及多种网站监控,数据缓存,网络通信,持久层,权限管理,常用工具等
Stars: ✭ 270 (+315.38%)
Mutual labels:  mybatis, redis, druid, jwt, aop, thymeleaf
Springbootexamples
Spring Boot 学习教程
Stars: ✭ 794 (+1121.54%)
Mutual labels:  swagger, dubbo, mybatis, redis, spring-boot, rocketmq

SOA EShop

介绍请参见http://blog.csdn.net/songxinjianqwe/article/details/78923482

Dubbo + TCC 分布式事务

业务拆分

用户子系统:

  • 用户模块:user+mail,涉及user,role,mail,mail_text,balance表
  • 产品模块:product,涉及product,category表
  • 新闻模块:news,涉及news表

订单子系统:order,涉及order表

邮件子系统

约定

公共的domain、enumeration都放在common模块下 一般情况下api模块放service接口和exception异常 注意自己模块的异常放在自己模块的api模块下(Dubbo异常机制) i18n资源文件放在common下即可,别的模块下不用放

启动顺序

email,order,user,web

注意事项

所有实体类都要实现serializable接口 Dubbo异常处理机制: 异常类和接口类在同一jar包里,直接抛出 ,否则被调方service中抛出的异常,在调用方中会被包一层RuntimeException,无法获得原来的异常

TCC 解决订单支付问题

概述

Try: 尝试执行业务

完成所有业务检查(一致性)

预留必须业务资源(准隔离性) Confirm: 确认执行业务

真正执行业务

不作任何业务检查

只使用Try阶段预留的业务资源

Confirm操作满足幂等性 Cancel: 取消执行业务

释放Try阶段预留的业务资源

Cancel操作满足幂等性(因为可能会多次执行)

示例演示在下完订单后,使用红包帐户和资金帐户来付款,红包帐户服务和资金帐户服务在不同的系统中。 示例中,有两个SOA提供方,一个是CapitalTradeOrderService,代表着资金帐户服务,另一个是RedPacketTradeOrderService,代表着红包帐户服务。

下完订单后,订单状态为DRAFT, 在TCC事务中TRY阶段, 订单支付服务将订单状态变成PAYING, 同时远程调用红包帐户服务和资金帐户服务,将付款方的余额减掉(预留业务资源); 如果在TRY阶段,任何一个服务失败,tcc-transaction将自动调用这些服务对应的cancel方法, 订单支付服务将订单状态变成PAY_FAILED, 同时远程调用红包帐户服务和资金帐户服务,将付款方余额减掉的部分增加回去; 如果TRY阶段正常完成,则进入CONFIRM阶段,在CONFIRM阶段(tcc-transaction自动调用), 订单支付服务将订单状态变成CONFIRMED,同时远程调用红包帐户服务和资金帐户服务对应的CONFIRM方法, 将收款方的余额增加。

特别说明下,由于是示例,在CONFIRM和CANCEL方法中没有实现幂等性,如果在真实项目中使用,需要保证CONFIRM和CANCEL方法的幂等性。

一个幂等的操作典型如: 把编号为5的记录的A字段设置为0 这种操作不管执行多少次都是幂等的。

一个非幂等的操作典型如: 把编号为5的记录的A字段增加1 这种操作显然就不是幂等的。

业务逻辑

try: 账户余额扣减,订单状态设置paying confirm:订单状态设置为paid,收款方余额增加 cancel:账户余额回增,订单状态设置为pay_failed

扣减和增加需要实现幂等(Dubbo调用远程接口失败的话会重试):

  • cancel时如果订单状态不是paying,则不增加账户余额
  • confirm时如果订单状态不是paying,则不增加收款方余额
  • try时如果订单状态不是unpaid,则不扣减账户余额

要求实现并发,因为是读取-判断-更新的执行序列。

以try阶段为例:

  1. 请求1读取订单状态
  2. 请求2读取订单状态
  3. 请求1判断订单状态为unpaid,将订单状态设置为paying,并进行账户余额扣减
  4. 请求2判断订单状态为unpaid,执行同上操作

此时会扣减两次账户余额。 要求该执行序列要实现原子执行,比如MVCC方式。 在账户表中设置一个version。 TCC, 是基于补偿型事务的AP系统的一种实现, 具有最终一致性. 下面以客户购买商品时的付款操作为例进行讲解:

Try: 完成所有的业务检查(一致性),预留必须业务资源(准隔离性); 体现在本例中, 就是确认客户账户余额足够支付(一致性), 锁住客户账户, 商户账户(准隔离性). Confirm: 使用Try阶段预留的业务资源执行业务(业务操作必须是幂等的), 如果执行出现异常, 要进行重试. 在这里就是执行客户账户扣款, 商户账户入账操作. Cancle: 释放Try阶段预留的业务资源, 在这里就是释放客户账户和商户账户的锁; 如果任一子业务在Confirm阶段有操作无法执行成功, 会造成对业务活动管理器的响应超时, 此时要对其他业务执行补偿性事务. 如果补偿操作执行也出现异常, 必须进行重试, 若实在无法执行成功, 则事务管理器必须能够感知到失败的操作, 进行log(用于事后人工进行补偿性事务操作或者交由中间件接管在之后进行补偿性事务操作).

流程

try:

  1. 读取订单状态
  2. 如果订单状态为unpaid,则将订单状态设置为paying,执行账户余额扣减(可能会抛出异常此时会执行cancel)

confirm:

  1. 读取订单状态
  2. 如果订单是paying,则将订单状态设置为paid,执行收款方余额表的增加

cancel:

  1. 读取订单状态
  2. 如果订单状态是paying,则将订单状态设置为pay_failure,执行账户余额的回增

异步确保型(可靠消息最终一致)解决订单支付问题

由于远程事务的消息可能会重试,需要在业务上实现幂等(已经处理过的记录下来,遇到新的请求时 检查是否已经处理过)。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].