基本架构拆分如下:
其中最为关键的几个部分:
支付系统:对外暴露接口,但是内在集成了N多系统
搜索系统:需要利用搜索引擎,比如Lurence,进行全文检索,可以用solr elasticsearch 来简化搜索的开发
秒杀系统:需要独立成一个服务,避免高并发影响其他子系统
广告系统&内容系统:技术含量不高,但是是垂直电商区分水平电商的关键
大概的结构如下:
shop-parent
|—shop-goods-api(商品系统接口)
|—shop-goods-server(商品系统)
|—shop-order-api(订单系统接口)
|—shop-order-server(订单系统)
|—shop-member-api(会员系统接口)
|—shop-member-server(会员系统)
|—shop-mgrsite(后台管理界面)
|—shop-mobile(提供移动端的接口项目)
|—shop-scheduler(定时任务项目)
|—shop-common(公共项目)
其中scheduler定时任务项目,不能集成到其他系统中,只是单独做一个系统出来就OK(且不集群),这样就可以保证定时任务只会执行一次,避免性能的浪费
以上说明完成,接下来就应该做具体的搭建了
首先需要说明的是,这里使用的工具是STS,后面不再赘述
1.准备工作
说明:首先我们想要所有的项目到放在一个文件夹下,所以
首先选择视图模式为Working Sets
接下来创建在Configure Working Set…中创建对应的文件夹
附带说明:
使用STS的同时必须要记得开启代码提示,如何开启代码提示
具体如何开启代码提示:https://blog.csdn.net/baidu_32739019/article/details/64121023
如果以上工作都完成了,那么基本准备也就完成了
- 基本架构搭建
基本思路:
首先搭建架构之前,先看看基本的架构图:
这里我们先根据shop-goods这条线搭建基本的架构:
shop-parent --> shop-common —>shop-goods-api —>> shop-goods-server
----------------------------------------------------------------------->> shop-mgrsite
2.1 搭建父项目
首先新建一个Maven项目:
2.2 搭建子项目
打包方式说明:
由于我们这里的架构是做微服务的架构,因此spring boot 必不可少,spring boot的项目都有一个特点,就是web服务要尽量打成JAR包
具体原因是:
springboot 内部集成了tomcat的服务器,WEB应用的JAR可以直接被加载,
但是war包就不一样了,需要Jetty或者tomcat容器去加载,那么必然会引起Jar冲突
看到下面的module生成了,就说明成功了
接下来就用相同的方法,完成下面其余Module的建立
3.建立关联
回到我们之间的架构图,可以发现:
一、 所有的项目都是parent的子项目
二、 项目之间彼此有依赖关系
从Goods线来看:
附:为什么两个项目会去依赖:shop-goods-api?
原因是:shop-goods-server和shop-mgrsite有共同的domain和接口类,为了方便统一管理,故抽出做管理
以上内容在本人的ZooKeeper: 在CentOS7中配置Zookeeper并搭建测试环境有详细的阐述:
https://blog.csdn.net/fenghuoliuxing990124/article/details/84979590
回到正题,我们开始建立对应的依赖,由于上面要建立依赖,于是在parent中:
在shop-goods-api中依赖shop-common:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>cn.csdn.shopgroupId>
<artifactId>shop_demo-parentartifactId>
<version>1.0.0version>
parent>
<artifactId>shop_demo-goods-apiartifactId>
<name>shop_demo-goods-apiname>
<dependencies>
<dependency>
<groupId>cn.csdn.shopgroupId>
<artifactId>shop_demp-commonartifactId>
dependency>
dependencies>
project>
附:可能会出现的问题:missing artifact
如果出现此类的问题:简单来说:无解
请重新删除出现问题的module后(包括硬盘),重新new一个module来解决该问题
建议不要在网上找答案(浪费时间),因为maven的依赖是个玄学问题
4.搭建SpringBoot环境
由于我们要搭建的是微服务,下一步就是为搭建微服务提供基本的SpringBoot环境
首先我们这里为parent导入的父依赖是:
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>1.5.1.RELEASEversion>
parent>
在导入子项目所需依赖之前,先点击spring-boot-starter-parent跳入依赖中,
复制下面这段话,并将JDK的版本从1.6修改为1.8
<properties>
<java.version>1.8java.version>
<resource.delimiter>@resource.delimiter>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<maven.compiler.source>${java.version}maven.compiler.source>
<maven.compiler.target>${java.version}maven.compiler.target>
properties>
接下来我们要为子项目导入必要的依赖:
<dependency>
<groupId>com.gitee.regergroupId>
<artifactId>spring-boot-starter-dubboartifactId>
<version>1.0.10version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.7version>
dependency>
<dependency>
<groupId>commons-iogroupId>
<artifactId>commons-ioartifactId>
<version>2.4version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-activemqartifactId>
dependency>
剩下将下面的依赖导入parent的dependencyManagement
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.0.25version>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>1.2.0version>
dependency>
OK,至此电商项目基本的架构就完成了,下一步就是逐步完善了