Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)

一、 工程结构
第三方支付系统架构
| pay-common-parent | 项目的 Maven 父配置工程 |
|---|---|
| pay-common | 公共工程,所有项目均可引用 |
| pay-common-config | 公共配置工程 |
| pay-common-core | 公共核心工程,service 工程共用 |
| pay-common-web | 公共 web 工程,web 工程共用 |
| - | - |
| pay-api-merchant | 商户 API 工程,商户对接支付平台时使用(如:模拟商城 pay-web-shop) |
| - | - |
| pay-facade-account | 账户服务接口 |
| pay-facade-bank | 银行管理服务接口 |
| pay-facade-banklink | 银行后置服务接口 |
| pay-facade-boss | 运营服务接口 |
| pay-facade-cost | 成本计算服务接口 |
| pay-facade-fee | 商户计费服务接口 |
| pay-facade-limit | 交易限制服务接口 |
| pay-facade-notify | 通知服务接口 |
| pay-facade-payrule | 支付规则服务接口 |
| pay-facade-remit | 打款服务接口 |
| pay-facade-report | 报表服务接口 |
| pay-facade-settlement | 结算服务接口 |
| pay-facade-trade | 交易服务接口 |
| pay-facade-user | 用户服务接口 |
| - | - |
| pay-service-account | 账户服务 |
| pay-service-bank | 银行管理服务 |
| pay-service-banklink | 银行后置服务 |
| pay-service-boss | 运营服务 |
| pay-service-cost | 成本计算服务 |
| pay-service-fee | 商户计费服务 |
| pay-service-limit | 交易限制服务 |
| pay-service-notify | 通知服务 |
| pay-service-payrule | 支付规则服务 |
| pay-service-remit | 打款服务 |
| pay-service-report | 报表服务 |
| pay-service-settlement | 结算服务 |
| pay-service-trade | 交易服务 |
| pay-service-user | 用户服务 |
| - | - |
| pay-app-queue-notify | 消息队列监听app |
| - | - |
| pay-timer-report | 报表分析定时任务 |
| - | - |
| pay-web-bank-receive | 银行回调请求信息接收 |
| pay-web-boss | 运营管理系统 |
| pay-web-gateway | 支付网关 |
| pay-web-notify-receive | 通知消息接收 |
| pay-web-portal | 门户系统 |
| pay-web-trade | 交易接口 |
| - | - |
| pay-web-shop | 模拟商城 |
讲解杂点:
如何进行测试和开发
pay-common-parent项目中的 有两个一个是main 一个是test mqsql, 在运行maven参数的时候通过-p参数,就可以引用测试环境或者开发的测试环境,同样的代码可以部署两套。
二、 系统简要功能演示
三、技术点介绍
- FastDFS 分布式文件系统的使用
(存储商户的图片信息,用户客户端和管理客户端都能使用文件,达到文件的共享,比如上传身份证进行实名认证) - ActiveMQ 消息队列的使用
上面的通知服务和通知消息接受模块,在通知服务接口中,写明了地址,在pay-common-config项目中指明了,哪个项目接受,可以看到NOTIFY_RECIVE_URL=xxxxxxpay-web-notify-receive - Redis 分布式缓存的使用
读的多写的少的项目都建议用redis
四、 部署结构介绍
部署(单节点)
一、前期准备
1、MySQL 数据库的安装:MySQL-5.6.22,自行安装
2、Dubbo 视频教程–基础篇–第 03 节–ZooKeeper 注册中心安装
3、Dubbo 视频教程–基础篇–第 06 节–Dubbo 管理控制台的安装
4、Dubbo 视频教程–基础篇–第 10 节–Dubbo 监控中心的介绍与简易监控中心的安装
5、持续集成管理平台(SVN、Nexus、Maven、Hudson)的安装:
Dubbo 视频教程–基础篇–第 11 节至 18 节
6、Dubbo 视频教程–高级篇–第 21 节–ActiveMQ 的安装与使用
7、Dubbo 视频教程–高级篇–第 22 节–Redis 的安装与使用
8、Dubbo 视频教程–高级篇–第 23 节–FastDFS 分布式文件系统的安装与使用
二、对部署环境进行规划

创建数据库
数据库编码为:UTF-8
数据库引擎为:InnoDB
导入“基于 Dubbo 的分布式系统架构视频教程–简易版支付系统源码.rar”中的 “数据库–edu_simple_pay.rar”中的“edu_simple_pay.sql”
调整公共配置文件

修改包括mysql、邮件等配置信息,只是单纯了解架构的不需要。
应用部署前期准备
1、common 工程构建、发布到 Maven 私有库

尤其注意 pay-common-config 工程的构建(配置文件修改后需要重新构建,引用处也要重新构建)
先构架pay-common-parent,因为其他项目有很多依赖于它
2、facade 工程构建、发布到 Maven 私有库

部署服务
1、规划好服务部署目录,准备好服务管理脚本


/home/wusc/edu/service/account/service-account.sh
#!/bin/sh
## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_72
export JRE_HOME=$JAVA_HOME/jre
## you just need to change this param name
APP_NAME=account
SERVICE_DIR=/home/wusc/edu/service/$APP_NAME
SERVICE_NAME=pay-service-$APP_NAME
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid
cd $SERVICE_DIR
case "$1" in
start)
nohup $JRE_HOME/bin/java -Xms128m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 & echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;
stop)
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
echo "=== stop $SERVICE_NAME"
sleep 5
P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "=== $SERVICE_NAME process not exists or stop success"
else
echo "=== $SERVICE_NAME process pid is:$P_ID"
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
kill -9 $P_ID
fi
;; restart)
$0 stop
sleep 2
$0 start
echo "=== restart $SERVICE_NAME"
;;
*)
## restart
$0 stop
sleep 2
$0 start
;;
esac exit 0
2、使用 Hudson 来自动化部署服务

3、通过 Dubbo 管控台检查各服务是否都部署成功

部署 Web 应用
1、规划好 Web 应用部署目录、端口、脚本

修改tomcat端口的时候配置文件中的三个都要改
修改tomcat端口
bank-receive-tomcat 8081
boss-tomcat 8082
gateway-tomcat 8083
notify-receive-tomcat 8084
portal-tomcat 8085
shop-tomcat 8086
trade-tomcat 8087
tomcat下的脚本
/home/wusc/edu/web/bank-receive-tomcat/restart.sh
## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_72
export JRE_HOME=$JAVA_HOME/jre
## restart tomcat
current_dir=$(cd `dirname $0`; pwd)
echo "=== current_dir is:$current_dir"
$current_dir/bin/shutdown.sh
sleep 3
rm -rf $current_dir/webapps/*/ //删除webapps中的所有目录
sleep 2
$current_dir/bin/startup.shv
部署 APP,消息队列的监听

对app的重新构建部署的脚本
/home/wusc/edu/app/queue-notify/app-queue-notify.sh
#!/bin/sh
## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_72
export JRE_HOME=$JAVA_HOME/jre
## you only need to change next two parameters value
APP_DIR=/home/wusc/edu/app/queue-notify
APP_NAME=pay-app-queue-notify
JAR_NAME=$APP_NAME\.jar
cd $APP_DIR
## check app process weather exists
process=`ps aux | grep -w "$APP_NAME" | grep -v grep`
if [ "$process" == "" ]; then
echo "=== $APP_NAME process not exists"
else
echo "=== $APP_NAME process exists"
echo "=== $APP_NAME process is : $process"
## get PID by process name
P_ID=`ps -ef | grep -w "$APP_NAME" | grep -v "grep" | awk '{print $2}'`
echo "=== $APP_NAME process PID is:$P_ID"
echo "=== begin kill $APP_NAME process"
kill $P_ID
sleep 3
P_ID=`ps -ef | grep -w "$APP_NAME" | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "=== $APP_NAME process stop success"
else
echo "=== $APP_NAME process kill failed, PID is:$P_ID"
echo "=== begin kill -9 $APP_NAME process, PID is:$P_ID"
sleep 3
kill -9 $P_ID
fi fi
sleep 2
echo "=== begin start $APP_NAME"
$JRE_HOME/bin/java -Xms128m -Xmx512m -jar $APP_DIR/$JAR_NAME >/dev/null 2>&1 &
部署定时任务
定时任务的部署与调用分离

值是将定时任务的项目部署在了某个目录中没有具体的脚本


注意创建这个定时任务的工程的时候是“创建一个自由风格的软件项目”,而不是maven项目


上面的定时任务调度timer-report设置为每天凌晨三点二十五分调度
注意build periodically schedule 是执行定时任务的设置
下面的poll scm是查看版本库中是否有变动

调用脚本的机器地址和脚本目录
这里和之前的maven项目配置不一样,之前是在系统设置中的ssh sites
这里需要的插件“Hudson SSH plugin” “Publish Over SSH” 这两个,装个这两个插件才能配置系统设置中的ssh sites 和 ssh servers
定时任务脚本:
/home/wusc/edu/timer/report/timer-report.sh
#!/bin/sh
## java env
export JAVA_HOME=/usr/local/java/jdk1.7.0_72
export JRE_HOME=$JAVA_HOME/jre
## you only need to chage next two line value
SERVICE_DIR=/home/wusc/edu/timer/report
APP_NAME=pay-timer-report
JAR_NAME=$APP_NAME\.jar
sleep 1
echo "=== invoke task, please wait"
$JRE_HOME/bin/java -jar $SERVICE_DIR/$JAR_NAME >/dev/null 2>&1 &
## until process stop to print log
while true
do
process=`ps aux | grep $APP_NAME | grep -v grep`;
if [ "$process" == "" ]; then
sleep 1;
echo "=== task complete";
sleep 3;
break;
else
echo "=== process is running, please wait";
sleep 10;
continue;
fi done
Dubbo入门到精通学习笔记(九):简易版支付系统介绍、部署(单节点)的更多相关文章
- Dubbo入门到精通学习笔记(十七):FastDFS集群的安装、FastDFS集群的配置
文章目录 FastDFS集群的安装 FastDFS 介绍(参考:http://www.oschina.net/p/fastdfs) FastDFS 上传文件交互过程: FastDFS 下载文件交互过程 ...
- Dubbo入门到精通学习笔记(十八):使用Redis3.0集群实现Tomcat集群的Session共享
文章目录 1.单节点访问http://192.168.1.61:8082/pay-web-boss/: 2.增加多一个消费者节点:192.168.1.62,以同样的方式部署pay-web-boss工程 ...
- Dubbo入门到精通学习笔记(十):dubbo服务集群 、Dubbo分布式服务子系统的划分、Dubbo服务接口的设计原则
文章目录 dubbo服务集群 Dubbo服务集群部署 Dubbo服务集群容错配置--集群容错模式 1.Failover Cluster 失败自动切换,当出现失败,重试其它服务器.`(缺省) 通常用于读 ...
- Dubbo入门到精通学习笔记(七):基于Dubbo的分布式系统架构介绍(以第三方支付系统架构为例)、消息中间件的作用介绍
文章目录 架构简单介绍 消息中间件在分布式系统中的作用介绍 消息中间件的定义 消息中间件的作用 应用场景 JMS(Java Message Service) JMS消息模型 实现了JMS规范的消息中间 ...
- Dubbo入门到精通学习笔记(八):ActiveMQ的安装与使用(单节点)、Redis的安装与使用(单节点)、FastDFS分布式文件系统的安装与使用(单节点)
文章目录 ActiveMQ的安装与使用(单节点) 安装(单节点) 使用 目录结构 edu-common-parent edu-demo-mqproducer edu-demo-mqconsumer 测 ...
- Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务
文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...
- Dubbo入门到精通学习笔记(十三):ZooKeeper集群的安装、配置、高可用测试、升级、迁移
文章目录 ZooKeeper集群的安装.配置.高可用测试 ZooKeeper 与 Dubbo 服务集群架构图 1. 修改操作系统的/etc/hosts 文件,添加 IP 与主机名映射: 2. 下载或上 ...
- Dubbo入门到精通学习笔记(十九):MySQL源码编译安装、MySQL主从复制的配置
文章目录 MySQL 源码编译安装(CentOS-6.6+MySQL-5.6) 一.服务器配置: 二.源码安装 MySQL5.6.26: MySQL主从复制的配置 环境 依赖课程 MySQL 主从复制 ...
- Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived
文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...
随机推荐
- MySQl 截取函数 left(),right(),substring(),substring_index() 的用法
1. 字符串截取:left(str, length) mysql> select left('sqlstudy.com', 3); +-------------------------+ | l ...
- 指向自身类型的成员指针的初始化,this不属于类对象的一部分
有下面的一个简单的类: class CNullPointCall{public: static void Test1(); void Test2(); void Test3(int ...
- 其他信息: 未能加载文件或程序集“WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。找 到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
记录一下,发布web时遇到的一些问题. 一.报错信息: 其他信息: 未能加载文件或程序集“WebGrease, Version=1.5.1.25624, Culture=neutral, Public ...
- 阻抗匹配 及 SI9000 使用
1. 阻抗匹配 1. 波长 * 频率 = 光速(3*10^8) 2. PCB走线什么时候需要做阻抗匹配? 不主要看频率,而关键是看信号的边沿陡峭程度,即信号的上升/下降时间,一般认为如果信号的上升/下 ...
- linux与Windows下的heap
Windows提供Heap相关的API,可以创建多个Heap. 但是Linux下只有一个意义上的Heap,就是Data Segment,由brk/sbrk系统调用来调整其大小. 参考:http://m ...
- SpringBoot2.0拦截器 与 1.X版本拦截器 的实现
1.5 版本 先写个拦截器,跟xml配置方式一样,然后将拦截器加入spring容器管理 .接着创建 配置文件类 继承 WebMvcConfigurerAdapter 类,重写父类方法addInter ...
- 14-vim-替换命令-01-替换
命令 英文 功能 工作模式 r replace 替换当前字符 命令模式 R replace 进入替换模式 替换模式 R命令进入替换模式,输入新字符替换当前光标所在位置的字符,替换完成后,按下ESC可以 ...
- Redis Sentinel 高可用方案
redis 主从复制的问题 Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 1,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来. 2,扩展主节点的读能力,分担主节点读压 ...
- ReentrantReadWriteLock的相关使用
ReentrantLock具有完全互斥排他的效果,同一时间只有一个线程执行ReentrantLock.lock()方法后面的任务,这样虽然能够保证线程安全性,但是效率是比较低的 ReentrantRe ...
- Codeforces542E Playing on Graph 思维+DFS+BFS
解法参考https://www.cnblogs.com/BearChild/p/7683114.html这位大佬的,这位大佬讲得很好了. 这道题还是有一定的思维的. 直接贴代码: #include&l ...