SpringCloud第一天
单机架构
- 优点: 易于测试 便于集成 ⼩型项⽬友好
 - 缺点: 开发速度慢 启动时间⻓ 依赖庞⼤
 
分布式架构
SOA :Service Oriented Architecture ⾯向服务的架构
其中包含多个服务, 服务之间通过相互依赖最终提供⼀
系列的功能, ⼀个服务 通常以独⽴的形式存在与操作系
统进程中, 各个服务之间 通过⽹络调⽤。
微服务:将⼀个⼤的单体应⽤进⾏细粒度的服务化拆
分,每个拆分出来的服务各⾃独⽴打包部署,各个服务
之间 通过⽹络调⽤。
- 优点
- 易开发、理解和维护
 - 独⽴的部署和启动
 
 - 缺点
- 分布式系统-》分布式事务问题
 - 需要管理多个服务-》服务治理
常见组件和名字解释 
 
- 网关:进行路由转发,过滤器,
 - 服务发现注册(调用和被调用方的信息维护,当服务启动的时候,都会向他注册)
 - 配置中心(动态更新application.properties),将每一个微服务的端口号啥的都记录到这里
 - 链路追踪:分析调⽤链路耗时 例⼦:下单-》查询商品服务获取
商品价格-》查询⽤户信息-》保存数据库,这个例子都是调用的不同的微服务,可以通过可视化的页面追踪 - 负载均衡器: 分发流量到多个节点,降低压⼒
 - 熔断:保护⾃⼰和被调⽤⽅,当有一个服务不可用的时候,进行降级,也就是不用这个必要的服务
 
整体架构选用的是AlibabaCloud
SpringCloud很多组件是基于第三⽅整合,⽬前多个已
经不更新了,⽐如zuul、eureka、hystrix等。
AlibabaCloud 提供⼀站式微服务解决⽅法,已经和
SpringCloud进⾏了整合,组件互相⽀持
AlibabaCloud全家桶介绍
- https://github.com/alibaba/spring-cloud-alibaba
 - 服务注册发现:Nacos
 - 服务限流降级:Sentinel
 - 分布配置中⼼:Nacos
 - 服务⽹关:SpringCloud Gateway
 - 服务之间调⽤:Feign、Ribbon
 - 链路追踪:Sleuth+Zipkin
 
开始搭建项目初始结构
首先是数据库建表
user表

video表

video_user表

然后创建一个初始化的maven项目,一开始什么也没有,这时候我们也不需要src了,可以直接删掉

然后pom添加依赖
<?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>hzwq.wpb</groupId>
    <artifactId>spring-cloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <!--
           https://mvnrepository.com/artifact/org.spring
           framework.boot/spring-boot-dependencies/2.3.3.RELEASE-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--
           https://mvnrepository.com/artifact/org.spring
           framework.cloud/spring-cloud�dependencies/Hoxton.SR8-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR8</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--
           https://mvnrepository.com/artifact/com.alibab
           a.cloud/spring-cloud-alibaba-dependencies/2.2.1.RELEASE-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
然后在这个项目中创建4个子模块

然后在user,video,order这三个模块中依赖于common模块
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>hzwq.wpb</groupId>
            <artifactId>wpb-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
然后再common包下创建三个实体类
public class User {
 private Integer id;
 private String name;
 private String pwd;
 private String headImg;
 private String phone;
 private Date createTime;
 private String wechat;
}
public class Video {
 private Integer id;
 private String title;
 private String summary;
 private String coverImg;
 private Integer price;
 private Date createTime;
 private Double point;
}
public class VideoOrder {
 private Integer id;
 private String outTradeNo;
 private Integer state;
 private Date createTime;
 private Integer totalFee;
 private Integer videoId;
 private String videoTitle;
 private String videoImg;
 private Integer userId;
}
然后再在主pom文件中添加
<properties>
 <java.version>1.8</java.version>
 
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
 </properties>
 
 
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.2</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
然后在三个字模块中application.yml添加mybatis的配置
server:
 port: 9000
spring:
 application:
 name: wpb-video-service
 datasource:
 driver-class-name:
com.mysql.cj.jdbc.Driver
 url:
jdbc:mysql://127.0.0.1:3306/wpb?useUnicode=true&characterEncoding=utf-8&useSSL=false
 username: root
 password: 123456
# 控制台输出sql、下划线转驼峰
mybatis:
 configuration:
 log-impl:
org.apache.ibatis.logging.stdout.StdOutImpl
 map-underscore-to-camel-case: true
然后每个模块剩下的就和springboot基本上一致了。
    个人qq:835493858  有事联系我

                
            
        
浙公网安备 33010602011771号