ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Lottery 分布式抽奖系统开发起点:环境搭建、工程结构与研发规范全解

Lottery 分布式抽奖系统开发起点:环境搭建、工程结构与研发规范全解 文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载本篇基于 CodeGuide 仓库中的《第01节环境、配置、规范》文档展开围绕 Lottery 分布式抽奖系统的开发前准备工作系统讲解技术环境要求、六大工程列表、自研分库分表组件 DB-Router 的落地方式以及分支命名与 Commit 提交规范。读完本文你可以完整准备出该 DDD 项目的本地开发环境明确每个工程模块的职责边界并掌握一套可直接用于团队项目的规范化研发流程。一、项目定位与学习路径Lottery 抽奖系统是 CodeGuide 仓库 中收录的一个基于 DDD领域驱动设计四层架构的分布式实战项目。抽奖只是营销体系中的一个重要微服务系统围绕它串联了架构搭建、功能配置、服务开发等环节覆盖高并发、高性能、高可用场景的技术实践。从 项目介绍文档 可以看到整个课程分为五章阶段目录内容Part-1docs/md/project/lottery/Part-1大厂码农开发基础、需求来源、系统架构设计、进入开发、上线维护Part-2docs/md/project/lottery/Part-2领域开发环境配置、DDD 四层架构、RPC、库表设计、分库分表、MQ、xxl-job、滑动库存分布式锁等 19 节Part-3docs/md/project/lottery/Part-3运营后台ERPUI 工程搭建、活动列表、用户抽奖数据展示Part-4docs/md/project/lottery/Part-4应用场景微信公众号网关、vue H5 大转盘抽奖Part-5docs/md/project/lottery/Part-5系统运维Docker、Redis、Kafka、Mysql、xxl-job、nacos、Elasticsearch/Kibana、canal 的部署本文聚焦 Part-2 开篇的《第01节环境、配置、规范》它是整个编码阶段的起点先把环境配齐、把工程结构理清、把规范立好后续 18 节代码开发才能顺利推进。二、开发环境准备根据 第01节文档 的定义项目核心开发环境如下JDK 1.8SpringBoot 2.6.0Dubbo 2.7.10DB-ROUTER自研分库分表路由组件项目以带你一起写个 SpringBoot Starter的方式落地vue开发 H5 大转盘抽奖页面微信公众号对接提供 API实现回复消息抽奖Docker本地和云服务器两种场景均可此外配套的中间件环境包括mysql、kafka、zk、redis、xxl-job文档建议统一使用 Docker 部署并通过 Portainer 面板进行可视化管理——不只是 DDD 分布式项目开发这部分同时覆盖了 Docker 的实践使用。仓库中 Part-5 部署章节 给出了每个中间件的具体部署步骤例如 在云服务器部署 Docker 一节说明了 CentOS 8.x Docker 20.10.11 的部署过程以及拉取镜像失败时通过registry-mirrors配置镜像加速的处理方式Redis、Kafka、Mysql、xxl-job、nacos、Elasticsearch/Kibana、canal 均有独立章节。学习本文的环境清单后可按这些章节逐项把环境搭建起来。结合项目介绍文档中的补充环境项还应包含Maven 3.6.3、Mysql 5.7可升级配置SpringBoot 与 Mybatis 版本随工程 POM 走。三、工程列表六大模块的职责划分从源码结构和文档描述看Lottery 系统的分布式架构共包含 6 个工程工程职责Lottery分布式部署的抽奖服务系统提供抽奖业务领域功能以分布式部署方式提供 RPC 服务Lottery-API网关 API 服务提供 H5 页面抽奖、公众号开发回复消息抽奖入口Lottery-FrontC 端用户系统基于 vue lucky-canvas 的大转盘抽奖界面覆盖 vue 工程创建、模块引入、接口开发、跨域访问和功能实现Lottery-ERPB 端运营系统满足运营人员对活动的查询、配置、修改、审核等操作DB-Router分库分表路由组件基于 HashMap 核心设计原理使用哈希散列 扰动函数把数据散列到多个库表并配套验证工程Lottery-Test测试验证系统用于测试验证 RPC 服务与系统功能调用其中需要特别注意的是db-router-spring-boot-starter 是自研数据库路由组件需要把代码下载到本地自行构建到本地 Maven 仓库后才能被 Lottery 工程引入使用。仓库中的 db-router 专题文档 对组件设计做了完整展开这里提前建立认知后续第 10 节《实现和使用分库分表》中会深入使用它。四、DB-Router自研分库分表组件的构建与使用DB-Router 是本项目的差异化技术点也是面试高频话题。根据 db-router 文档组件的技术要点包括路由注解DBRouter标记在需要分库分表的 DAO 方法上指定路由键如key userIdDocumented Retention(RetentionPolicy.RUNTIME) Target({ElementType.TYPE, ElementType.METHOD}) public interface DBRouter { String key() default ; }AOP 切面拦截切面中完成路由计算、扰动函数散列、库表索引折算并通过 ThreadLocal 传递数据源索引Around(aopPoint() annotation(dbRouter)) public Object doRouter(ProceedingJoinPoint jp, DBRouter dbRouter) throws Throwable { String dbKey dbRouter.key(); if (StringUtils.isBlank(dbKey)) throw new RuntimeException(annotation DBRouter key is null); // 计算路由 String dbKeyAttr getAttrValue(dbKey, jp.getArgs()); int size dbRouterConfig.getDbCount() * dbRouterConfig.getTbCount(); // 扰动函数 int idx (size - 1) (dbKeyAttr.hashCode() ^ (dbKeyAttr.hashCode() 16)); // 库表索引 int dbIdx idx / dbRouterConfig.getTbCount() 1; int tbIdx idx - dbRouterConfig.getTbCount() * (dbIdx - 1); // 设置到 ThreadLocal DBContextHolder.setDBKey(String.format(%02d, dbIdx)); DBContextHolder.setTBKey(String.format(%02d, tbIdx)); try { return jp.proceed(); } finally { DBContextHolder.clearDBKey(); DBContextHolder.clearTBKey(); } }配置解析与动态数据源通过EnvironmentAware接口从配置中提取router.jdbc.datasource.dbCount、tbCount、list等多数据源信息创建继承AbstractRoutingDataSource的DynamicDataSource实现动态数据源切换。MyBatis 占位符SQL 表名中使用${tbIdx}占位符写入当前表 ID例如FROM user_${tbIdx}。在 Lottery 项目中的落地流程为用 IDEA 打开 DB-Router 工程执行 Maven Install 把 Jar 打包到本地仓库之后 Lottery 工程即可在 POM 中直接引入该依赖。项目笔记notes.md中还记录了组件的使用效果不仅满足差异化字段组合的分库分表还支持 Redis 库存分片与秒杀滑动库存分块其路由散列公式为idx / tbCount 1 idx - tbCount * (dbIdx - 1)。关于自研而非引入 ShardingSphere 的原因笔记文档给出了三点维护性组件更轻、维护成本低、扩展性分库分表、自定义路由协议、扫描指定库表数据、安全性减少额外引入 jar 包带来的安全风险。五、学习方式分支即课程文档对学习流程给出了一条关键约定课程每一章都对应代码仓库中的一个分支需要切换分支学习并且分支内doc/assets/sql目录存放该分支所需的最新 SQL 语句在所在分支查看后更新到自己的库表即可。具体使用建议按分支取建表语句doc/assets/sql里的 SQL 建议跟随分支内的版本走。因为需求会不断迭代升级优化直接拿最新 SQL 可能在各个分支下出现代码运行问题按分支切代码克隆代码库后切换到当前学习章节对应的分支这样代码与章节内容一一对应如果不切换在 master 分支看到的是全量代码会与章节进度脱节两种代码获取方式密码方式登录用户 ID 为 CSDN 个人中心的用户 ID密码为 CSDN 登录密码SSH 秘钥免登录方式在 GitCode 平台的个人设置页配置 SSH 密钥按章节顺序学习各章节内容承上启下建议先看视频入门再结合文章和代码一起学最好结合自己的思考把代码敲下来而不是直接抄写初始打包顺序需要在 Lottery 工程的 Maven 根上点击 Install 完整打包否则 Lottery-Test 等工程不能正常引入 Jar 包问题排查共性问题一般沉淀在项目 issue 文档中学习遇到疑惑可先检索 issue再提交新 issue学习疑惑、Bug 提醒、优化建议、技术分享均可。六、开发规范分支命名与提交规范文档第五节给出了项目统一的研发规范这是互联网团队协作的基本盘值得在任何 Java 团队项目中直接复用。1. 分支命名格式为日期_姓名首字母缩写_功能单词例如210804_xfg_buildFramework2. 提交规范Commit message格式为作者type: desc例如小傅哥fix修复查询用户信息逻辑问题。type 取值分为三档# 主要type feat: 增加新功能 fix: 修复bug # 特殊type docs: 只改动了文档相关的内容 style: 不影响代码含义的改动例如去掉空格、改变缩进、增删分号 build: 构造工具的或者外部依赖的改动例如webpacknpm refactor: 代码重构时使用 revert: 执行git revert打印的message # 暂不使用type test: 添加测试或者修改现有测试 perf: 提高性能的改动 ci: 与CI持续集成服务有关的改动 chore: 不修改src或者test的其余修改例如构建过程或辅助工具的变动这套约定与业界通用的 Commit message 规范一致feat/fix作为日常主力docs/style/build/refactor/revert覆盖特殊场景test/perf/ci/chore在项目中暂不使用——这种裁剪后落地的思路比照搬完整规范更贴近团队实际。七、作业提交与团队准则为了让学习留下真实足迹文档要求提交两类作业工程作业把学习代码提交到指定的工程代码空间仓库命名标准为项目-星球用户编号-作者ID例如Lottery-1-xiaofuge。文字作业围绕四个问题展开今天的你学到了哪个章节遇到什么问题怎么解决的掌握到了什么知识项目组同时约定了交流准则以讨论技术为主、禁止推送广告与营销推广内容、禁止刷屏、禁止发送过于负面情绪内容。这套准则本质上是把技术社区 代码作业空间 直播答疑组合成了闭环学习机制。八、小结与下一步本文对应项目学习的第一节核心交付三件事环境JDK 1.8 SpringBoot 2.6.0 Dubbo 2.7.10 Dockermysql/kafka/zk/redis/xxl-jobDB-Router 需本地构建安装结构Lottery、Lottery-API、Lottery-Front、Lottery-ERP、DB-Router、Lottery-Test 六工程各司其职DDD 四层架构 设计模式贯穿后端代码规范分支命名日期_姓名首字母缩写_功能单词提交信息作者type: desc。环境就绪后建议按顺序进入下一节 搭建DDD四层架构初始化基于 DDD 分层 Dubbo RPC 的工程骨架随后是 跑通广播模式RPC过程调用。如果学习中需要回顾项目全貌、技能亮点与高频面试问题notes.md 汇总了项目介绍、简历模板与项目问答可作为对照参考。赞分享文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载相关推荐log-lottery抽奖系统5分钟搭建专业级3D动态抽奖平台log lottery抽奖系统5分钟搭建专业级3D动态抽奖平台 log lottery是一个基于Vue3和Three.js技术栈构建的3D球体动态抽奖应用专前端桌面应用pgai 开发者上手指南Monorepo 结构、环境搭建、提交规范与 Docker 开发环境pgai 开发者上手指南Monorepo 结构、环境搭建、提交规范与 Docker 开发环境 本文以仓库根目录的 DEVELOPMENT.md https:/AI应用RAG数据库后端向量数据库惊艳全场log-lottery 3D抽奖系统完整搭建手册惊艳全场log lottery 3D抽奖系统完整搭建手册 你知道吗传统的抽奖方式正在被全新的3D交互体验所颠覆。log lottery作为一款基于Three前端桌面应用上一篇markdown-to-json 项目常见问题解决方案下一篇sc-controller陀螺仪功能详解提升你的游戏操作精度创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表