问题1:整体的项目架构与技术选型
技术选型
开发环境
域名测试
如何把项目起来,以及每一个目录结构大概是什么样子
通过webpack去启动了有个项目,这里还是热部署,文件改动,内容就会改动
Dev这个命令会生成一个本地循环地址和ip,然后直接访问这个ip就可以访问到项目
下面说一下关键目录结构
说一下里面的webpack.base.conf.js这个配置文件
再来说config这个文件夹,是项目的配置文件,里面的Index.js可以定义端口,一般后端端口我们全部设置为80开始的端口,前端就是90打头
每个页面是如何找到的
在src下面是我们存放的具体相关页面
下面看一下主体文件
主页面的一个修改
下面说一下怎么找到具体的一个页面
这里每一个title都对应了一个路由
基本上来说前端页面就是这样进行修改的
整体的项目创建
先来创建一个大的父工程,用来给子工程管理依赖
采用无骨架方式创建一个父工程
引入下面依赖
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion><groupId>com.leiyou.parent</groupId><artifactId>leiyou</artifactId><version>1.0.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.RC1</spring-cloud.version><mybatis.starter.version>1.3.2</mybatis.starter.version><mapper.starter.version>2.0.2</mapper.starter.version><druid.starter.version>1.1.9</druid.starter.version><mysql.version>5.1.32</mysql.version><pageHelper.starter.version>1.2.3</pageHelper.starter.version><leyou.latest.version>1.0.0-SNAPSHOT</leyou.latest.version><fastDFS.client.version>1.26.1-RELEASE</fastDFS.client.version></properties><dependencyManagement><dependencies><!-- springCloud --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- mybatis启动器 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.starter.version}</version></dependency><!-- 通用Mapper启动器 --><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>${mapper.starter.version}</version></dependency><!-- 分页助手启动器 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pageHelper.starter.version}</version></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--FastDFS客户端--><dependency><groupId>com.github.tobato</groupId><artifactId>fastdfs-client</artifactId><version>${fastDFS.client.version}</version></dependency></dependencies></dependencyManagement><!--放到这个下面的依赖会直接把子类继承--><dependencies><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.4</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories>
</project>
既然这是一个微服务项目,那么就会涉及到注册中心,网关
下面去搭建一个ly-registry模块,这里面的注册中心采用eureka来进行注册
在父类的基础之上创建一个模块
这里说一个问题:引入Eureka的依赖报红问题
Eureka的依赖是依赖于Spring Cloud的,Spring cloud的版本的不同会导致Eureka可能下载不下来。
所以,首先Spring cloud的引入版本很重要,你的maven镜像能不能把这个spring cloud下载到本地
先来看以前用到的Spring cloud版本
这个版本对应的就是Spring cloud的如下版本
看一下仓库下面的spring boot的版本
这个问题是你如果在父类pom文件里面引入的spring cloud版本不能下载下来,那么后面的Eureka你根本导入不进来。
下面在创建一个网关的服务
这个网关这个位置必须提供两个依赖
RestTemplate的用法
常用的方法如下:
几个注解的作用
下面说一下关于通用mapper的用法
关于通用mapper的用法
在Eureka中出现找不到服务
先来说一下,关于某个服务的配置,比如user-serive这个服务,它会被注册到eureka注册中心,那么这个服务就会发送一个心跳给一个eureka,告诉它,它是存在的,这个心跳的配置就是
一个用于检测心跳多久发送一次,主要用于判断服务是否健康。
一个用于在服务端多久没收到这个服务的心跳就会默认杀死这个服务
关于ribbon的配置
关于项目结构问题
item是一个商品微服务,它的下面有一组接口与服务组件,接口就是类,这个类的pom文件不需要任何依赖,但是在ly-item-service里面还是需要很多依赖的
它这个业务逻辑大概是这样
上面pom文件与yml文件都配完了,下面说一下如何测试能够打通
这里需要测试的几个微服务
ly-item
ly-registry
ly-gateway
微服务启动可能出现的问题1:
上面的问题可能是配置文件出了问题
hikari没找到数据库驱动管理类
微服务启动还可能出现的问题
连接拒绝,连接失败,这个时候直接make clean
它的作用如下
下面说一下在写项目的过程中的异常处理
ResponseEntity这个类,它是继承了HttpEntity这个类,可以添加HtttpStatus状态码。
常见的http状态码
关于枚举类的一些说明
枚举里面可以定义常量,变量与方法(方法一般采用构造方法定义),这里可以通过枚举本身的构造方法为枚举常量赋值
解决域名映射问题
一般来说,在网络中存在一台DNS域名解析器,这台域名解析器能解析网络中已经注册好了的域名配置,但是如果没有注册域名,就需要去本地的Host文件进行修改
去把localhost配置到映射文件里面
映射ip可以做了,但是端口号怎么解决,采用nginx来做。
这里的核心就是nginx帮我们监听80端口,端口过来之后,根据location来帮我们负责路径的转发
每一个server块就是一个请求路由,然后帮我监听相应的请求路径,然后根据location的定位负责进行转发。
为什么manage.leyou.com这个过来,会一直跳转失败呢
看一下上面的配置,监听的一个server_name是manage.leyou.com ,而这个在DNS网关里面是没有配置过的,所以需要在本地的Hosts里面进行一个配置,也就是在linux机器上做一个配置,但是没有去配,linux找不到这个ip地址.
另外需要再次说明的是,在IDEA对后端项目的配置上,不能这样去配置
也就是说划红线的位置不能是localhost,因为如果是locahost就只有本地机器才能访问到 ,我们现在需要用linux去访问这个位置,配置成0.0.0.0就代表任何ip都可以进行访问
这里必须修改一下windows上面的hosts文件
上面的端口全部改成linux 的主机ip,不然路由不到
下面展示一下反向代理的正确配置
下面进入实际的业务层操作
这是它的后端