{"repo":"huhuics/joice","free":true,"listed":false,"github":"https://github.com/huhuics/joice","clone":"git clone https://github.com/huhuics/joice.git","description":"Java分布式开发平台：Spring, Spring MVC, MyBatis, Dubbo, Redis, Shiro权限管理, Quartz分布式调度, RocketMQ通信, 本地缓存, Redis缓存, 分布式缓存, 分布式事务","language":"Java","stars":241,"topics":["redis","dubbo","shiro","spring","distributed-system","distributed-transactions"],"license":null,"category":"databases-storage","readme_excerpt":"Joice 目录 - 目录 - 一. joice项目简介 - 二. 主要功能 - 1.数据库 - 2.持久层 - 3.MVC - 4.调度 - 5.session - 6.Shiro - 7.缓存和Session - 8.RocketMQ - 8.1 错误的方案 - 8.2 方案1——业务方自己实现 - 8.3 方案2——RocketMQ事务消息 - 8.4 顺序消息 - 9.日志 - 10.缓存 - 10.1 数据放入缓存 - 10.2 修改缓存 - 10.3 缓存设计关键点 - 三. 启动 一. joice项目简介 + joice是使用Spring框架开发的分布式系统架构。 + 使用Maven对项目进行模块化管理，提高项目的易开发性、扩展性。 + 公共功能：AOP、缓存、基类、公共配置、工具类等。 + 系统功能：权限控制、调度管理、分布式事务、RPC。 + 扩展性：可动态扩展集群节点，节点之间通过Dubbo和MQ进行通信。 二. 主要功能 1.数据库 Druid数据库连接池，监控数据库访问性能，统计SQL执行性能，数据库密码加密。 + 数据库密码加密和解密用到了 com.alibaba.druid.filter.config.ConfigTools ，再定一个类扩展 com.alibaba.druid.pool.DruidDataSource 即可，具体代码实现在 org.joice.service.datasource.DecryptDruidDataSource 2.持久层 MyBatis持久化；AOP切换数据库实现读写分离。 + 读写分离实际上是动态切换数据库。扩展 org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource ，在每次数据库调用前确定数据源。具体代码实现在 org.joice.service.aspect.ChooseDataSource 3.MVC 基于Spring MVC注解，REST风格Controller。Exception统一管理。 4.调度 Spring + Quartz，可以查询、修改周期、暂停、删除、新增、立即执行、查询执行记录等。 + Quartz知识点总结 + 具体实现在 org.joice.service.support.scheduler.SchedulerManager 5.基于Session的国际化提示信息，责任链模式的本地语言拦截器 未完 6.Shiro登录、URL权限管理、会话管理、强制结束会话 未完 7.缓存和Session 未完 注解redis缓存数据，Spring-session和redis实现分布式session同步，重启服务会话不丢失。 8.RocketMQ RocketMQ知识点总结 对于分布式事务的实现，常见的一致性算法（如二阶段提交）耗时长、效率低，一般使用MQ来实现数据的最终一致性。 大事务 = 小事务 + MQ 以转账为例：有两个账号要进行转账操作，两个账号分属A、B两个不同系统，有两个不同的数据库，A要扣钱，B要加钱，如何保证数据一致性？ 根据最终上面的思路：A系统扣钱，然后发消息给中间件，B系统接收此消息，进行加钱。但这里有两个问题：A是先扣钱，后发送消息？还是先发送消息，后扣钱？ 假设A先扣钱，再发送消息 如果扣钱成功，但网络异常，发送消息失败，重试依然失败，怎么办？ 假设A先发送消息，再扣钱 如果消息发送成功，但扣钱失败，消息又不能撤回，怎么办？ 结论：只要发送消息和扣钱这两个操作不是","default_branch":null,"files":null,"tree":[],"storefront":"/r/huhuics","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/huhuics/joice/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}