国王小组:数字货币交易所搭建如何实现分布式部署

简介: Java 交易所源码,前端APP使用uniapp开发,后端使用java开发,采用 Spring Cloud Alibaba 微服务架构,撮合引擎使用Disruptor高效内存队列,所有服务可以实现分布式部署,websocket推送通过增加一层路由服务实现分布式部署

Java 交易所源码,前端APP使用uniapp开发,后端使用java开发,采用 Spring Cloud Alibaba 微服务架构,撮合引擎使用Disruptor高效内存队列,所有服务可以实现分布式部署,websocket推送通过增加一层路由服务实现分布式部署

如果对你有帮助,麻烦小手给一个star

前端说明
之前由于uniapp的闪屏一度准备放弃,暂时解决闪屏问题,重新开始开发

uni-app切换页面闪屏或者白屏

前端代码,点击跳转

依赖环境
先运行 Nacos 服务。点击跳转官方文档

Linux/Unix/Mac
$ sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows
$ startup.cmd -m standalone
再运行 Seata 服务。点击跳转官方文档

在 script/seata 目录下面查看配置seata的教程,需要运行SQL和把配置文件传到nacos

在 Linux/Mac 下

$ ./bin/seata-server.sh -h 127.0.0.1 -p 8091 -m db
在 Windows 下
$ bin\seata-server.bat -h 127.0.0.1 -p 8091 -m db
再运行 rocketmq 消息队列服务。点击跳转官方文档

rocketmq分name服务和broker服务

Linux

Start Name Server 启动名称服务器

$ nohup sh bin/mqnamesrv &

Start Broker 启动代理

$ nohup sh bin/mqbroker -n localhost:9876 &
Windows

先设置环境变量:ROCKETMQ_HOME="D:\rocketmq"

Start Name Server 启动名称服务器

$ .\bin\mqnamesrv.cmd

Start Broker 启动代理

$ .\bin\mqbroker.cmd -n localhost:9876
如果windows启动代理报错:错误: 找不到或无法加载主类 Files\Java\jdk1.8.0_301\lib\dt.jar;C:\Program,这个报错原因是因为java环境安装路径包含了空格

解决方案:点击查看 runbroker.cmd 内容在文章底部有

下载-打包
git clone https://github.com/lmxdawn/exchange.git

整体打包

mvn -Dmaven.test.skip=true clean package

单独打包某个模块,这里的 user 就是模块名称

mvn -Dmaven.test.skip=true -pl user -am clean package

运行

nohup java -jar -Dspring.profiles.active=prod admin/target/admin-0.0.1-SNAPSHOT.jar &
nohup java -jar -Dspring.profiles.active=prod gateway/target/gateway-0.0.1-SNAPSHOT.jar &
nohup java -jar -Dspring.profiles.active=prod user/target/user-0.0.1-SNAPSHOT.jar &
模块说明
dubbo-api:dubbo的API

gateway:网关 9001

admin:后台 9002

other:其它模块 9003

user:用户 9004

wallet:钱包 9005

market:行情 9006

trade:交易 9007

match:撮合 9008

ws:消息推送 9009

ws-route:消息推送路由 9010

robot:机器人 9011

Swagger
gateway的方式访问swagger,gateway启动后访问: http://ip:prot/swagger-ui/index.html

使用
dubbo 做微服务的调用

Seata 做微服务的分布式事务,操作目录 script/seata 安装步骤

使用 jwt 做dubbo服务间的鉴权

example 目录是示例文件,需要加 module 时创建一个module,然后复制example里面的代码,全局替换 example

依赖
Java 8

Maven 3.6.1 版本控制

RocketMQ 4.9.3 消息队列

Nacos 2.0.3 操作文档:https://nacos.io/zh-cn/docs/quick-start.html

Redis 3 缓存服务

MySQL 5.7 数据库服务

MongoDB 5.0.5 K线数据库服务

Seata 1.3.0 分布式事务解决方案

Disruptor 3.4.4 高效的内存队列,为了多线程操作变量时并发问题,用这个可以不用锁

Netty 4.1.71.Final ws消息推送

其它
Generate MyPOJOs.groovy 生成数据库Model

RocketMQ 的 runbroker.cmd
@echo off
rem Licensed to the Apache Software Foundation (ASF) under one or more
rem contributor license agreements. See the NOTICE file distributed with
rem this work for additional information regarding copyright ownership.
rem The ASF licenses this file to You under the Apache License, Version 2.0
rem (the "License"); you may not use this file except in compliance with
rem the License. You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License.

set JAVAHOME="%JAVA_HOME%"
if not exist "%JAVA_HOME%\bin\java.exe" echo Please set the JAVA_HOME variable in your environment, We need java(x64)! & EXIT /B 1
set "JAVA=%JAVA_HOME%\bin\java.exe"

setlocal

set BASE_DIR=%~dp0
set BASE_DIR=%BASE_DIR:~0,-1%
for %%d in (%BASE_DIR%) do set BASE_DIR=%%~dpd

set CLASSPATHSTR="%CLASSPATH%"
set CLASSPATH=.;%BASE_DIR%conf;%BASE_DIR%lib*;%CLASSPATHSTR%

rem ===========================================================================================
rem JVM Configuration
rem ===========================================================================================
set "JAVA_OPT=%JAVA_OPT% -server -Xms2g -Xmx2g"
set "JAVA_OPT=%JAVA_OPT% -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:SurvivorRatio=8"
set "JAVA_OPT=%JAVA_OPT% -verbose:gc -Xloggc:%USERPROFILE%\mq_gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
set "JAVA_OPT=%JAVA_OPT% -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
set "JAVA_OPT=%JAVA_OPT% -XX:-OmitStackTraceInFastThrow"
set "JAVA_OPT=%JAVA_OPT% -XX:+AlwaysPreTouch"
set "JAVA_OPT=%JAVA_OPT% -XX:MaxDirectMemorySize=15g"
set "JAVA_OPT=%JAVA_OPT% -XX:-UseLargePages -XX:-UseBiasedLocking"
set "JAVA_OPT=%JAVA_OPT% -Djava.ext.dirs=%BASE_DIR%lib;%JAVAHOME%\jre\lib\ext"
set "JAVA_OPT=%JAVA_OPT% -cp %CLASSPATH%"

"%JAVA%" %JAVA_OPT% %*

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
4月前
|
Java 测试技术 Linux
jmeter-分布式部署之负载机的设置
jmeter-分布式部署之负载机的设置
241 2
|
4月前
|
Docker 容器 关系型数据库
【PolarDB-X从入门到精通】 第四讲:PolarDB分布式版安装部署(源码编译部署)
本期课程将于4月11日19:00开始直播,内容包括源码编译基础知识和实践操作,课程目标是使学员掌握源码编译部署技能,为未来发展奠定基础,期待大家在课程中取得丰富的学习成果!
【PolarDB-X从入门到精通】 第四讲:PolarDB分布式版安装部署(源码编译部署)
|
3月前
|
分布式计算 Java Hadoop
杨校老师课堂之分布式数据库HBase的部署和基本操作
杨校老师课堂之分布式数据库HBase的部署和基本操作
42 0
|
8天前
|
存储
cephFS高可用分布式文件系统部署指南
关于如何部署高可用的cephFS分布式文件系统,包括集群的搭建、验证高可用性以及实现两主一从架构的详细指南。
31 9
|
9天前
|
分布式计算 资源调度 Hadoop
在YARN集群上运行部署MapReduce分布式计算框架
主要介绍了如何在YARN集群上配置和运行MapReduce分布式计算框架,包括准备数据、运行MapReduce任务、查看任务日志,并启动HistoryServer服务以便于日志查看。
23 0
|
27天前
|
Java Nacos Docker
"揭秘!Docker部署Seata遇上Nacos,注册成功却报错?这些坑你不得不防!一网打尽解决秘籍,让你的分布式事务稳如老狗!"
【8月更文挑战第15天】在微服务架构中,Nacos搭配Seata确保数据一致性时,Docker部署Seata后可能出现客户端连接错误,如“can not connect to services-server”。此问题多由网络配置不当、配置文件错误或版本不兼容引起。解决策略包括:调整Docker网络设置确保可达性;检查并修正`file.conf`和`registry.conf`中的Nacos地址和端口;验证Seata与Nacos版本兼容性;修改配置后重启服务;参考官方文档和最佳实践进行配置。通过这些步骤,能有效排除故障,保障服务稳定运行。
34 0
|
29天前
|
存储 运维 安全
多云网络部署存在挑战,F5分布式云应用简化方案解读
多云网络部署存在挑战,F5分布式云应用简化方案解读
25 0
|
4月前
|
关系型数据库 MySQL 数据库
测试部署PolarDB-X 分布式与集中式
在本文中,作者详述了在CentOS 7.9上部署测试PolarDB-X分布式与集中式数据库的过程。PolarDB-X作为阿里云优化的分布式数据库,提供高稳定性和与MySQL的兼容性,是应对单体数据库扩展性和性能瓶颈的解决方案,同时也符合国产化需求。文章介绍了部署环境准备,包括关闭防火墙和SELinux,设置系统参数,安装Python3和Docker,以及配置MySQL客户端。接着,通过PXD工具部署了PolarDB-X的集中式和分布式版,遇到的问题包括阿里云镜像源异常导致的部署失败以及指定版本安装的困扰。最后,作者进行了初步的压力测试,并对文档完善、生态工具建设以及提供更多使用案例提出了建议。
47884 10
测试部署PolarDB-X 分布式与集中式
|
2月前
|
缓存 Devops 微服务
微服务01好处,随着代码越多耦合度越多,升级维护困难,微服务技术栈,异步通信技术,缓存技术,DevOps技术,搜索技术,单体架构,分布式架构将业务功能进行拆分,部署时费劲,集连失败如何解决
微服务01好处,随着代码越多耦合度越多,升级维护困难,微服务技术栈,异步通信技术,缓存技术,DevOps技术,搜索技术,单体架构,分布式架构将业务功能进行拆分,部署时费劲,集连失败如何解决
|
4月前
|
SQL 消息中间件 存储
【一文看懂】使用hape部署分布式版Havenask
本次分享内容为使用hape部署分布式版Havenask,共2个部分组成(部署分布式版Havenask集群、 分布式相关问题排查),希望可以帮助大家更好了解和使用Havenask。
165100 6