下载地址:【xbin-store】模仿国内知名B2C网站,实现的一个分布式B2C商城+
分享一些关于这个分布式环境的搭建遇到一些坑,帮助后来者更好的学习分布式相关技术
使用技术:
后台
- 使用Spring Boot 构建整个项目 去除 XML 配置
- Maven构建项目
- Jenkins作为持续集成
- 采用Dubbox作为RPC框架
- kryo序列化
- 使用 Apollo 配置中心(目前这个有问题,导致项目不能启动,我已经全部注释)
- 使用Spring+Spring MVC+MyBatisSSM框架
- 数据库连接池使用druid
- 数据库使用MySQL和Redis
- 页面引擎采用 Beetl
- 网页采用freemarker生成静态化页面
- 存储采用FastDFS存储图片等文件
- 采用Solr实现搜索服务
- Swagger2 生成 RESTful Apis文档
- 负载均衡使用Nginx、keepalived实现高可用
- 采用Spring Scheduled做任务调度
- 消息中间件采用RabbitMQ
- 在分布式事务上则采用了TCC解决订单支付方面时效性要求性高的分布式事务,可靠的消息服务则来解决如会计记录等时效性要求低的分布式事务.
前台
- 采用基于AdminLTE的roncoo-adminLTE(主要增加了Ajax的布局模式)
- AdminLTE集成太多Js这里就不一一列举了
项目结构图
[外链图片转存失败(img-3jXlSkDa-1562930369937)(https://raw.githubusercontent.com/xubinux/xbin-store/master/Images/xbin-store.png)]
目前的开发进度
直接看效果图
运行环境
- jdk1.8+tomcat+mysql+maven+idea
安装过程
- 一定先看作者的安装视频,视频地址链接:https://pan.baidu.com/s/1qZTPwlu 密码:irn0
- 源码目录结构,我使用的idea直接导入,导入正确的结构,会出现各种jar包问题,我直接把本地的仓库全部上传了,maven本地仓库下载链接:https://pan.baidu.com/s/1o9Tn3HC,密码:iu2a 直接覆盖本地的.m2下的文件即可
- 注释掉里面所有关于私服的配置,阿里云镜像的保留,只注释私服
- 使用 Apollo 配置中心,关于Apollo自行百度,如果使用这个配置会一直报一个关于com/google/guava,不用管他,把所有的@EnableApolloConfig全部注释掉
- 此时项目编译应该不会出现红线错误,如果有还是存在,建议更新下maven索引,会有点长,等他更新完,重启idea
- 如果出现spring-boot-starter-druid,doubbox,redis找不到的情况,建议直接使用idea导入源码,install到本地仓库
- 关于虚拟机的搭建,为了方便测试,我在虚拟机上的Windows上搭建了zookeeper+dobbuo+redis+jdk1.8+tomcat8的环境,使用本地的mysql,fastdfs不影响程序运行没有搭建,直接使用VMware Fusion 导入即可使用,镜像下载地址
- 启动zookeeper,在启动tomcat,redis,直接输入,启动顺序一定是先zookeeper在tomcat,http://127.0.0.1:8080/dubbo-admin-2.5.5/会要一个填写账号密码的弹窗,默认账号密码是root/root,我虚拟机的运行情况
- 修改项目中的所有的yml文件,有两个要注意的地方,一是zookeeper的注册地址,而是doubbo的地址,zookeeper写虚拟机的地址,端口不用变,doubbo直接注释掉或者填写本机的IP,如果出现IP问题,百度VMware固定IP的设置
- 关于druid密码加密的问题,我即是加密一样出现一个密码未加密的错误,建议是直接改为false,然后填写未加密的密码
- 接下里开始编译项目,使用install -DskipTests
- 正确的编译截图,如果还有问题,一般都是jar的问题
项目运行
- 启动XbinStoreServiceRedisApplication
- 启动XbinStoreServiceNotifyApplication
- 启动XbinStoreServiceSSOApplication
- 启动XbinStoreWebSSOApplication
- 整个项目所有的static文件目录不能出现任何错误,js.css这些一样不行,全部启动成功,输入localhost:8104/login就可以看到登陆页面
- 关于后台登陆密码的问题,作者使用DigestUtils.md5DigestAsHex去加密密码,我没有使用fastdfs所以直接生成的密码