Lottery抽奖项目学习第二章第一节:环境、配置、规范
Lottery抽奖项目学习第二章第一节:环境、配置、规范
环境、配置、规范
下面以DDD架构和设计模式落地实战的方式,进行讲解和实现分布式抽奖系统的代码开发,那么这里会涉及到很多DDD的设计思路和设计模式应用,以及互联网大厂开发中所应用到的技术,包括:SpringBoot、Mybatis、Dubbo、MQ、Redis、Mysql、ELK、分库分表、Otter 等。在开始项目之前,仔细阅读如下介绍信息,方便更加快速的进入学习。
一、开发环境
- JDK 1.8
- SpringBoot 2.6.0
- Dubbo 2.7.10
- DB-ROUTER 自研分库分表组件,学习一起写SpringBoot Starter
- vue开发H5大转盘抽奖
- 微信公众号对接提供API,回复抽奖
- Docker 本地/服务器均可
其他所需环境如下
- 不只是DDD分布式项目开发,还可以学习到关于Docker的实践应用
二、环境配置
- 技术栈项:JDK1.8,Maven3.6.3,MySQL5.7,SpringBoot、MyBatis、Dubbo随POM版本
- 初始打包:需要在Lottery工程的Maven根上,点击install才能完整打包,否则Lottery-Test等不能正常引入jar包
- 建表语句:doc/asserts/sql-建议随非分支内sql版本走,因为需求不断迭代升级优化,直接使用最新的会遇到在各个分支下的代码运行问题。
- 下载依赖:
db-router-spring-boot-starter
本项目依赖自研分库分表组件,需要用IDEA像打开一个项目一样打开,之后点击Maven install就可以把jar打包到本地仓库,Lottery就可以引入jar了。 - 服务部署:本机直接安装Docker进行配置;
三、工程列表
- 分布式核心功能服务系统:Lottery:提供抽奖业务领域功能,以分布式部署的方式提供RPC。
- 网关API服务:Lottery-API:网关服务,提供H5页面抽奖、公众号开发回复消息抽奖。
- C端用户系统:Lottery-front:开发中,vue H5 转盘抽奖lucky-canvas
- B端运营系统:Lottery-ERP:满足运营人员对于活动的查询、配置、修改、审核等操作。
- 分库分表路由组件:db-router-spring-boot-starter:本项目依赖自研分库分表组件,需要下载后构建开发一个基于HashMap核心设计原理,使用哈希三列+扰动函数的方式,把数据散列到多个库表中的组件,并验证使用。
- 测试验证系统:Lottery-Test:用于测试验证RPC服务、系统功能调用的测试系统。
六、开发规范
分支命名:日期+id+功能单词,如:
230820_LBHQC_buildFramework
# 主要type
feat: 增加新功能
fix: 修复bug# 特殊type
docs: 只改动了文档相关的内容
style: 不影响代码含义的改动,例如去掉空格、改变缩进、增删分号
build: 构造工具的或者外部依赖的改动,例如webpack,npm
refactor: 代码重构时使用
revert: 执行git revert打印的message# 暂不使用type
test: 添加测试或者修改现有测试
perf: 提高性能的改动
ci: 与CI(持续集成服务)有关的改动
chore: 不修改src或者test的其余修改,例如构建过程或辅助工具的变动
项目学习源自小傅哥的知识星球
处于版权考虑,后续章节内容将以仅个人可见的形式发布。
相关文章:
![](https://img-blog.csdnimg.cn/96bb68b4447043549f2034a21d099195.png)
Lottery抽奖项目学习第二章第一节:环境、配置、规范
Lottery抽奖项目学习第二章第一节:环境、配置、规范 环境、配置、规范 下面以DDD架构和设计模式落地实战的方式,进行讲解和实现分布式抽奖系统的代码开发,那么这里会涉及到很多DDD的设计思路和设计模式应用,以及互联网大厂开发中…...
![](https://www.ngui.cc/images/no-images.jpg)
OpenCV之reshape函数
函数原型: /** brief Changes the shape and/or the number of channels of a 2D matrix without copying the data.The method makes a new matrix header for \*this elements. The new matrix may have a different sizeand/or different number of channels. A…...
![](https://img-blog.csdnimg.cn/59c2d80e01f34f3ab7563f0736a77b88.png)
【JavaEE】Spring事务-@Transactional参数介绍-事务的隔离级别以及传播机制
【JavaEE】Spring事务(2) 文章目录 【JavaEE】Spring事务(2)1. Transactional 参数介绍1.1 value 和 transactionManager1.2 timeout1.3 readOnly1.4 后面四个1.5 isolation 与 propagation 2. Spring 事务隔离级别 - isolation2.…...
![](https://img-blog.csdnimg.cn/abd2740a8e2a4243bb89257d4b295562.png)
微信小程序canvas type=2d生成海报保存到相册、文字换行溢出显示...、文字删除线、分享面板
一、简介 做个简单的生成二维码海报分享,我做的时候也找简单的方法看能不能实现页面直接截图那种生成图片,原生小程序不支持,不多介绍下面有全部代码有注释、参数自行替换运行看看,还有需要优化的地方,有问题可以咨询…...
![](https://www.ngui.cc/images/no-images.jpg)
C++卷积神经网络
C卷积神经网络 #include"TP_NNW.h" #include<iostream> #pragma warning(disable:4996) using namespace std; using namespace mnist;float* SGD(Weight* W1, Weight& W5, Weight& Wo, float** X) {Vector2 ve(28, 28);float* temp new float[10];V…...
![](https://www.ngui.cc/images/no-images.jpg)
go 读取yaml映射到struct
安装 go get gopkg.in/yaml.v3创建yaml Mysql:Host: 192.168.214.134Port: 3306UserName: wwPassword: wwDatabase: go_dbCharset: utf8mb4ParseTime: trueLoc: LocalListValue:- haha- test- vv JWTSecret: nidaye定义结构体 type Mysql struct {Host string yaml:&…...
![](https://img-blog.csdnimg.cn/ffb9f9704f294f078b159cbd82e14f35.png)
Redis 10 大数据类型
1. which 10 1. redis字符串 2. redis 列表 3. redis哈希表 4. redis集合 5. redis有序集合 6. redis地理空间 7. redis基数统计 8. redis位图 9. redis位域 10. redis流 2. 获取redis常见操作指令 官网英文:https://redis.io/commands 官网中文:https:/…...
![](https://img-blog.csdnimg.cn/c8c956391e154e949f11f36ffea9b5a0.jpeg#pic_center)
优化生产流程:数字化工厂中的OPC UA分布式IO模块应用
背景 近年来,为了提升在全球范围内的竞争力,制造企业希望自己工厂的机器之间协同性更强,自动化设备采集到的数据能够发挥更大的价值,越来越多的传统型工业制造企业开始加入数字化工厂建设的行列,实现智能制造。 数字化…...
![](https://img-blog.csdnimg.cn/d0d24f215ae94a1997f40078025308d7.png)
Elasticsearch(十四)搜索---搜索匹配功能⑤--全文搜索
一、前言 不同于之前的term。terms等结构化查询,全文搜索首先对查询词进行分析,然后根据查询词的分词结果构建查询。这里所说的全文指的是文本类型数据(text类型),默认的数据形式是人类的自然语言,如对话内容、图书名…...
![](https://img-blog.csdnimg.cn/65365c23dd4c4e499028802bac6bb0d4.jpeg)
已解决Gradle错误:“Unable to load class ‘org.gradle.api.plugins.MavenPlugin‘”
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
![](https://img-blog.csdnimg.cn/25a11fac244e4efc87f09748c02cf1dc.png)
windows中安装sqlite
1. 下载文件 官网下载地址:https://www.sqlite.org/download.html 下载sqlite-dll-win64-x64-3430000.zip和sqlite-tools-win32-x86-3430000.zip文件(32位系统下载sqlite-dll-win32-x86-3430000.zip)。 2. 安装过程 解压文件 解压上一步…...
![](https://www.ngui.cc/images/no-images.jpg)
前端面试:【系统设计与架构】前端架构模式的演进
前端架构模式在现代Web开发中扮演着关键角色,它们帮助我们组织和管理前端应用的复杂性。本文将介绍一些常见的前端架构模式,包括MVC、MVVM、Flux和Redux,以及它们的演进和应用。 1. MVC(Model-View-Controller)&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
【CSS】em单位的理解
1、em单位的定义 MDN的解释:它是相对于父元素的字体大小的一个单位。 例如:父元素font-size:16px;子元素的font-size:2em(也就是32px) 注:有一个误区,虽然他是一个相对…...
![](https://www.learnfk.com/guide/images/wuya.png)
无涯教程-Python机器学习 - Based on human supervision函数
Python机器学习 中的 Based on human s - 无涯教程网无涯教程网提供https://www.learnfk.com/python-machine-learning/machine-learning-with-python-based-on-human-supervision.html...
![](https://img-blog.csdnimg.cn/e2fcce2177d44bbc9e616fc1439870d9.png)
【滑动窗口】leetcode209:长度最小的子数组
一.题目描述 长度最小的子数组 二.思路分析 题目要求:找出长度最小的符合要求的连续子数组,这个要求就是子数组的元素之和大于等于target。 如何确定一个连续的子数组?确定它的左右边界即可。如此一来,我们最先想到的就是暴力枚…...
![](https://www.ngui.cc/images/no-images.jpg)
C++ STL unordered_map
map hashmap 文章目录 Map、HashMap概念map、hashmap 的区别引用头文件初始化赋值unordered_map 自定义键值类型unordered_map 的 value 自定义数据类型遍历常用方法插入查找 key修改 value删除元素清空元素 unordered_map 中每一个元素都是一个 key-value 对,数据…...
![](https://img-blog.csdnimg.cn/861bd5dca2774e14a8bd8fdcd51e9b54.png)
全流程R语言Meta分析核心技术应用
Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…...
![](https://img-blog.csdnimg.cn/img_convert/04875e5751783e5afef1dfaec1df8735.png)
Go并发可视化解释 - Select语句
昨天,我发布了一篇文章,用可视化的方式解释了Golang中通道(Channel)的工作原理。如果你对通道的理解仍然存在困难,最好呢请在阅读本文之前先查看那篇文章。作为一个快速的复习:Partier、Candier 和 Stringe…...
![](https://img-blog.csdnimg.cn/f0b1e58fcf1246cc91ffb7f6c0887982.png)
在线SM4(国密)加密解密工具
在线SM4(国密)加密解密工具...
![](https://www.ngui.cc/images/no-images.jpg)
golang的类型断言语法
例子1 在 Go 中,err.(interface{ Timeout() bool }) 是一个类型断言语法。它用于检查一个接口类型的变量 err 是否实现了一个带有 Timeout() bool 方法的接口。 具体而言,该类型断言的语法如下: if v, ok : err.(interface{ Timeout() boo…...
![](https://img-blog.csdnimg.cn/img_convert/583e7f4048be315f9b4b86ec6dd8f5f3.png)
提速换挡 | 至真科技用技术打破业务壁垒,助力出海破局增长
各个行业都在谈出海,但真正成功的又有多少? 李宁出海十年海外业务收入占比仅有1.3%,走出去战略基本失败。 京东出海业务磕磕绊绊,九年过去国际化业务至今在财报上都不配拥有姓名。 几百万砸出去买量,一点水花都没有…...
![](https://img-blog.csdnimg.cn/37ac1ce21e574f5aa535299429ab867c.jpeg)
第3篇:vscode搭建esp32 arduino开发环境
第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 1.下载vscode并安装 https://code.visualstudio.com/ 运行VSCodeUserSetup-x64-1.80.1.exe 2.点击扩展,搜索arduino,并点击安装 3.点击扩展设置,配置arduino…...
![](https://www.ngui.cc/images/no-images.jpg)
Apache Shiro是什么
特点 Apache Shiro是一个强大且易用的Java安全框架,用于身份验证、授权、会话管理和加密。它的设计目标是简化应用程序的安全性实现,使开发人员能够更轻松地处理各种安全性问题,从而提高应用程序的安全性和可维护性。下面是一些Apache Shiro的关键特点和概念: 特点和概念…...
![](https://img-blog.csdnimg.cn/b094347271f944629ceab31a2892d9ee.png)
Socket基本原理
一、简单介绍 Socket,又称套接字,是Linux跨进程通信(IPC,Inter Process Communication)方式的一种。相比于其他IPC方式,Socket牛逼在于可做到同一台主机内跨进程通信,不同主机间的跨进程通信。…...
![](https://img-blog.csdnimg.cn/50606a5efe314a9fbd58b609529c2300.png)
Docker容器:本地私有仓库、harbor私有仓库部署与管理
文章目录 Docker容器:本地私有仓库、harbor私有仓库部署与管理一.本地私有仓库1.本地私有仓库概述2.搭建本地私有仓库3.容器重启策略简介 二.harbor私有仓库部署与管理1.什么是harbor2.Harbor的特性3、Harbor的构成4.Harbor私有仓库架构及数据流向5.harbor部署及配置…...
![](https://img-blog.csdnimg.cn/eaf20b2fbf954dabb1ebb38f125541d6.png)
Mobx在非react组件中修改数据,在ts/js中修改数据实现响应式更新
我们都之前在封装mobx作为数据存储的时候,使用到了useContext作为包裹,将store变成了一个hooks使用,封装代码: import React from react import UserInfo from ./user import Setting from ./seting import NoteStore from ./noteclass Stor…...
![](https://img-blog.csdnimg.cn/49003d19702f43c9a233b53cf361faf0.png)
什么是异步编程?什么是回调地狱(callback hell)以及如何避免它?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 异步编程⭐ 回调地狱(Callback Hell)⭐ 如何避免回调地狱1. 使用Promise2. 使用async/await3. 模块化和分离 ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订…...
![](https://www.ngui.cc/images/no-images.jpg)
Java8 Stream流常见操作--持续更新中
创建新数组 List<Fruit> newList fruits.stream().map(f -> new Fruit(f.getId(), f.getName() "s", f.getCountry())).collect(Collectors.toList())筛选数组 Map<Boolean, List<TransferData>> preAvg list.stream().collect(Collectors…...
![](https://img-blog.csdnimg.cn/419eb27c2aba441d9fa2ac9565374314.png)
【Linux】多线程概念线程控制
文章目录 多线程概念Linux下进程和线程的关系pid本质上是轻量级进程id,换句话说,就是线程IDLinux内核是如何创建一个线程的线程的共享和独有线程的优缺点 线程控制POSIX线程库线程创建线程终止线程等待线程分离 多线程概念 Linux下进程和线程的关系 在…...
![](https://img-blog.csdnimg.cn/64a0814c73a742839a6488d909ac0232.png)
Qt --- 自定义提示框 类似QMessagebox
QMessageBox::information(NULL, QString("title"), QString("I am information")); 以下是自定义提示框的代码,有图有真相!提示框大部分都采用模态的形式,关于模态也不再多提!所以父类为QDialog,…...
![](/images/no-images.jpg)
最火的二十个电商app/广州网络推广seo
这里总结了常见的一些mysql错误,会不断更新。 要求大家将如下错误的每个单词都知道是什么意思,方便调错。 --1.语法错误:SQL syntax [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL …...
![](http://bbs.itcast.cn/data/attachment/forum/201606/22/095546cl38fk7ql77qckbw.png.thumb.jpg)
做代购网站有哪些东西/阳东网站seo
一腔热血的你是否想通过自己的双手实现自己的梦想,却无从下手?彷徨迷茫的你是否感到薪水已经配不上你的能力,空有抱负,却无处施展?认真执着的你是否一直苦于自学钻研,却遇到了瓶颈,难以进步&…...
![](/images/no-images.jpg)
flash代码做网站教程/上海公关公司
计算机编程术语: 参考网址:https://blog.csdn.net/linear_luo/article/details/52318820 application 应用程式 应用、应用程序 application framework 应用程式框架、应用框架 应用程序框架 architecture 架构、系统架构 体系结构 argument 引数&am…...
![](/images/no-images.jpg)
做一家算命的网站/海外短视频软件
现在工作中很少使用原生的sql了,大多数的时候都在使用EF。刚开始的时候,只是在注重功能的实现,最近一段时间在做服务端接口开发。开发的时候也是像之前一样,键盘噼里啪啦的一顿敲,接口秒秒钟上线,但是到联调…...
![](/images/no-images.jpg)
网站建设合同书样本/汕头网站设计
大中型企业中,会设置许多组策略进行日常运维管理 ,毕然里面也存在许多废弃的策略,需要我们定期清理我们的组策略信息。通常我们导出HTML报告方式来帮助我们分析组策略信息: #1 首先需要加载GroupPolicy模块: Import-Mo…...
![](/images/no-images.jpg)
罗湖外贸网站建设/北京百度推广代运营
在php中可以使用内置函数gethostbyname获取域名对应的IP地址,比如:echo gethostbyname("www.jbxue.com");?>以上会输出域名所对应的的IP。对于做了负载与cdn的域名来讲,可能返回的结果会有不同,这点注意下。下面来说…...