# coin-exchange **Repository Path**: licdjdli/coin-exchange ## Basic Information - **Project Name**: coin-exchange - **Description**: 开源数字货币交易所,基于Java开发的货币交易所。本项目基于SpringCloudAlibaba框架,结合mysql,redis,rocketmq,mongodb,security,auth2.0等多种技术栈开发,可用来搭建和二次开发数字货币交易所,共涉及撮合引擎服务,行情服务,推送服务,交易服务,用户中心服务,监控服务,钱包服务等七个微服务。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2025-05-21 - **Last Updated**: 2025-12-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一.项目简介 ## 1.项目介绍 开源数字货币交易所,基于Java开发的货币交易所 | BTC交易所 | ETH交易所 | 数字货币交易所 | 交易平台 | 撮合交易引擎。本项目基于SpringCloudAlibaba微服务开发,可用来搭建和二次开发数字货币交易所 项目特色: 1) 基于内存撮合引擎,比传统基于数据库撮合引擎更快 ; 2) 前后端分离,基于OAuth2.0 + JWT的API授权机制 ; 3) 基于SpringCloud微服务架构,扩展更容易 ; 4) 集成阿里最新的研究成功SpringCloudAlibaba ; 5) MySQL、MongoDB、Redis多种数据存储方式,只为更快 ; 6) Kafka发布订阅消息队列,让订单更快流转 ; 7) Netty秒级实时K-Line推送 ; 8) uni-app“七端”共享 ; 9) 主流币种对接区块链接口齐全,开箱即用 ; 10) 冷热钱包分离,两种提现方式,保证安全; ## 2.后端技术 * Spring Framework 容器 http://projects.spring.io/spring-framework/ * Spring Boot 开发脚手架框架 https://spring.io/projects/spring-cloud/ * Spring Cloud 微服务框架 https://spring.io/projects/spring-boot/ * Spring Security 安全框架 https://spring.io/projects/spring-security * MyBatis-Plus ORM框架 https://mp.baomidou.com/ * Nacos 服务治理 https://nacos.io/zh-cn/ * Sentinel 服务保护 https://sentinelguard.io/zh-cn/ * Seata 分布式事务 http://seata.io/zh-cn/ * MyBatis ORM框架 http://www.mybatis.org/mybatis-3/zh/index.html * MyBatis Generator 代码生成 http://www.mybatis.org/generator/index.html * PageHelper MyBatis物理分页插件 http://git.oschina.net/free/Mybatis_PageHelper * Druid 数据库连接池 https://github.com/alibaba/druid * Mongodb 分布式文件存储数据库 https://www.mongodb.com/ * ZooKeeper 分布式协调服务 http://zookeeper.apache.org/ * Redis 分布式缓存数据库 https://redis.io/ * Redisson Redis客户端 https://redisson.org/ * Jetcache 缓存框架 https://github.com/alibaba/jetcache * RabbitMQ 消息队列 https://www.rabbitmq.com/ * Kafka 消息队列 http://kafka.apache.org/ * Disruptor 并发框架 https://lmax-exchange.github.io/disruptor/ * FastDFS 自建分布式文件系统 https://github.com/happyfish100/fastdfs * Log4J 日志组件 http://logging.apache.org/log4j/1.2/ * Swagger2 接口测试框架 http://swagger.io/ * Lombok 简化编码插件 https://projectlombok.org/ * CloudAlibaba OSS Qiniu 云存储 https://www.aliyun.com/product/oss/ http://www.qiniu.com/ * FastJson & Gson 数据序列化 https://github.com/alibaba/fastjson * Jenkins 持续集成工具 https://jenkins.io/index.html * Maven 项目构建管理 http://maven.apache.org/ * Tio 实时推送 https://gitee.com/tywo45/t-io * Netty 实时推送 https://netty.io/ * Akka 异步并发计算 https://akka.io/ ## 3.前端技术 ### 3.1后台管理系统 Vue + ElementUI + Axios + Xlsx + Showdown + Screenfull ![img.png](img.png) ### 3.2前台系统 Vue + ElementUI + Axios + Stompjs + Zip + vue-i18n ![img_1.png](img_1.png) ### 3.3移动端 ![img_2.png](img_2.png) ## 4.功能介绍 ### 4.1后台管理系统 ![img_3.png](img_3.png) ### 4.2前台系统 ![img_4.png](img_4.png) ### 4.2移动端 ![img_5.png](img_5.png) # 二.架构设计 ## 1.模块划分 ### 1. 撮合引擎服务 分布式内存撮合系统,使用Raft协议自建集群,实现数据复制、集群选举等,并自研分布式币种路由策略,解决多币之间数据隔离,线程竞争问题;当主机挂掉时,备机能快速感知并替换原主机状态继续提供服务,当集群扩容时,也实现数据分片的迁移和再分配。在部署时,我们可以采用单一分组,也可以采用 MULTI-RAFT-GROUP。我们还使用Nosql数据库mongo作为recovery的兜底方案,当撮合引擎所有节点都进行重新实例化时,那么就会走该兜底方案。 ### 2.行情服务 OpenAPI 对外提供OpenAPI(开放平台),我们所有API的设计遵循REST 设计标准,使用改造完后的swagger生成更符合国人习惯的测试平台; K-Line K线为专业K线,K线可自定义日K、1分、3分、5分、15 分、30分、10小时、2小时、4小时、6小时、12小时、1周等。价格平均线可以自定义:MA5、MA10、MA30及其他个性化配置。技术指标包括:MACD、 KDJ、RSI、DMI、OBV、BOLL、SAR、DMA、TRIX、BRAR、VR、EMV、WR、ROC、MTM、PSY ### 3.推送服务 推送服务为实时推送,数据的获取来自Kafka,多线程订阅Kafka的分组,底层通过修改spring-boot-stater-websocket让其支持Netty,并测试了TIO的推送方案,当客户端压力变大时,可通过Spring Cloud Gateway 和 Nginx 实现负载均衡。经测试,客户端无卡顿或数据丢失的情况。 ### 4.交易服务 币种获取、区域数据、币币交易市场行情,币币交易市场深度等各种交易数据展示,底层采用Redis做高速缓存,并使用Sentinel实现了服务的降级和流控。 ### 5.用户中心服务 提供用户账号信息、身份验证、注册登陆、邀请分级奖励、第三方验证等功能; ### 6.监控服务 Boot-Admin : 实现了服务上下线的邮件/短信/微信通知,显示微服务 name、id 和 version,显示在线状态,Loggers 的日志级别管理,Threads 线程管理,Environment 管理等; sentinel-dashboard: 提供一个轻量级的控制台,它提供机器发现、单机资源实时监控、集群资源汇总,以及规则管理的功能; Zipkin: 提供分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪,以及服务直接依赖关系的计算。 ### 7.钱包服务 采用了业界领先的冷热隔离充值钱包系统、多重签名、高防护DDOS攻击系统等领先技术,分钟级日志分析监控等手段,充分保证客户资产安全。 ## 2.设计要求 ![img_6.png](img_6.png) ## 3.整体架构 ![img_7.png](img_7.png) ## 4.逻辑架构 ![img_8.png](img_8.png) ## 5.部署架构 ![img_9.png](img_9.png) # 三.环境搭建 ## 1.基础软件的安装 ### 1.安装docker Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。我们在本次开发中将使用Docker部署我们所有基础软件! * u 安装Docker: * yum -y install docker * u 开机自启: * systemctl enable docker * u 启动Docker: * systemctl start docker * u 查看Docker当前的版本 * docker version * docker安装后记得安装加速配置 ### 2.安装mysql mysql 的镜像地址 https://hub.docker.com/mysql 执行如下命令: * docker run --name mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=Ltd3411?? -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci * 说明: * 3307 我们以后将使用3307 该端口来访问Mysql,主要是为了防止黑客扫描攻击 * MYSQL_ROOT_PASSWORD是指定Mysql的root密码,这里不用使用123456简单的数字 * character-set-server、collation-server设置默认的数据库编码为UTF-8 ### 3.安装redis * docker run --name redis -p 6380:6379 -d redis * 说明: * -p 6380 是将redis服务器监听的端口绑定在本地6380的端口上 * Redis必须配置数据库密码。 * 执行以下的命令: * 进入redis容器里面 * docker exec -it redis bash * 切换目录 * cd /usr/local/bin * 配置密码 * ./redis-cli * CONFIG SET requirepass Ltd3411?? ### 4.安装rocketmq * rocketmq-namesrv地址 * https://hub.docker.com/r/rocketmqinc/rocketmq-namesrv * rocketmq-broker地址 * https://hub.docker.com/r/rocketmqinc/rocketmq-broker * rocketmq-console-ng地址 * https://hub.docker.com/r/styletang/rocketmq-console-ng * Namesrv的安装 * 执行以下命令: * docker run --name namesrv -p 9876:9876 -e "MAX_POSSIBLE_HEAP=100000000" -d rocketmqinc/rocketmq sh mqnamesrv * broker 的安装 * 执行以下命令: * 创建文件夹: * mkdir -p /usr/local/rocketmq * 切换目录: * cd /usr/local/rocketmq * 新建broker.conf 文件 * vim broker.conf * 添加以下的配置: * brokerClusterName = DefaultCluster * brokerName = broker-a * brokerId = 0 * deleteWhen = 04 * fileReservedTime = 48 * brokerRole = ASYNC_MASTER * flushDiskType = ASYNC_FLUSH * brokerIP1 = 121.40.140.138 * ocker run --name broker -p 10911:10911 -p 10909:10909 -v /usr/local/rocketmq/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf --link namesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" -d rocketmqinc/rocketmq:4.4.0 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf * console 的安装 * docker run --name=rocketmq-console -e "JAVA_OPTS=-Drocketmq.namesrv.addr=121.40.140.138:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -d styletang/rocketmq-console-ng ### 5.安装mongoDB * 执行以下命令: * docker run --name mongo -p 27017:27017 -d mongo --auth * 执行以下命令: * docker -exec -it mongo mongo admin * 设置密码: * db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'root', db: 'admin'}]}); ### 6.安装nacos docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:1.1.4 ### 7.安装sentile docker run --name sentinel -p 8858:8858 -d bladex/sentinel-dashboard ### 8.安装seata docker run --name seata-server -p 8091:8091 -e SEATA_IP=121.40.140.138 -d seataio/seata-server ## 2.前端环境安装 ### 1.Node.js * NodeJS 是基于Chrome V8引擎的 JavaScript 运行环境。NodeJS使用事件驱动,非阻塞型I/O。NodeJS的包管理生态是 NPM,是现在世界上最大的开源程序包库。JavaScript是一门脚本语言,它需要一个运行环境。就好像PHP需要Apache、JSP需要Tomcat、Java需要JVM等等, 而NodeJS之前,JavaScript运行环境是浏览器,也就是JavaScript在网页中才能跑起来。NodeJS之后JavaScript又多了一个运行环境,就是NodeJS。 * 安装 * http://nodejs.cn/download/ * 我们可以看见现在nodejs现在最新的版本为 14.7.0,根据你的需要选择要下载的nodejs的版本。Windows用户推荐使用二进制文件,也就是zip的安装方式。现在我们下载64位的nodejs: * 点击下载完毕即可。 * 将下载的nodejs复制到你的安装软件的目录里面。以我的开发目录为例子,首先我切换到devtools里面: * 在该文件夹里面新建一个nodejs文件夹: * 将下载的nodejs的压缩包(zip文件)复制到nodejs文件夹里面: * 现在,使用压缩软件解压就可以了。 * 配置环境变量: 略过。 * 镜像加速 * NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: * 允许用户从NPM服务器下载别人编写的第三方包到本地使用。 * 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 * 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 * 由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。同样可以通过输入 "npm -v" 来测试是否成功安装。命令如下,出现版本提示表示安装成功。 * Npm 包服务器在国外,导致国内下载第三方的包异常的慢,在此,我们可以使用淘宝提供给我们的加锁地址直接运行: * npm install -g cnpm@7.1.1 --registry=http://registry.npmmirror.co ### 2.安装vscode ### 3.运行前端 前端已经放在了系统根目录下的coin-view文件下,其中“coin-manager”是管理系统对应的view,“coin-portal”是前台系统对应的view coin-manager: 1. npm install -g cnpm@7.1.1 --registry=http://registry.npmmirror.co 2. cnpm install 3. npm run dev ![img_10.png](img_10.png) coin-portal: 1. npm install -g cnpm@7.1.1 --registry=http://registry.npmmirror.co 2. cnpm install 3. npm run dev ![img_11.png](img_11.png) ## 3.数据库脚本 sql文件放在了根目录下的”sql文件夹“中 # 四.系统实现: https://www.yuque.com/licdjdli/coin-exchange