springboot-分布式实例开发(一)

分布式开发-电商系统项目搭建(一)

现在开始运用分布式架构,nginx,Redis,linux系统,springcloud,rabbitMQ,lcueue-solr,docker,以及其他代码检测工具,为朋友一起搭建电商系统,并讲解如何解决缓存问题,单点登录,反向代理,服务搭建,以及微服务十大组件具体使用,消息队列解决流量削峰,倒排索引,容器化等相关技术

1.高并发

说明:表示在单位时间内,有海量的用户访问服务器称之为高并发.
概念:tomcat支持并发压力
官方说明:220个/秒 测试值:150个/秒

2.分布式

概念:将传统项目根据特定的规则将项目进行拆分.
总结:根据分布式思想.对外项目的调用是统一的.对内项目是独立的.并且实现了项目架构的松耦合.
衍生:分布式是实现微服务基石.

2.1项目架构

传统项目是将所有功能模块写在一起,并部署在单台Tomcat上,若某个模块出问题就会影响整个服务正常运行。故需要考虑如何拆分系统
1.垂直拆分:根据业务模块将项目拆分为多个系统
垂直拆分
2.水平拆分
在垂直拆分的基础之上.根据代码的层级将项目进程拆分.
水平拆分

3.集群

概念:由多台tomcat服务器共同组成的为用户提供统一服务的服务器配置.不同的服务有不同的集群配置.
说明:搭建服务器集群是抗击高并发有效手段.

3.1集群高可用

“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性
计算机系统的可用性用 [1] 平均无故障时间(MTTF)来度量,即计算机系统平均能够正常运行多长时间,才发生一次故障。系统的可用性越高,平均无故障时间越长。可维护性用平均维修时间(MTTR)来度量,即系统发生故障后维修和重新恢复正常运行平均花费的时间。系统的可维护性越好,平均维修时间越短。计算机系统的可用性定义为:MTTF/(MTTF+MTTR) * 100%。由此可见,计算机系统的可用性定义为系统保持正常运行时间的百分比。
总结:当tomcat服务器发生故障,能够实现故障的自动迁移.不影响用户的使用.

4.分布式系统构建

4.1 分布式项目打包问题

业务说明:定义一个聚合项目.在聚合项目中定义公共的jar包.
其他项目需要基础聚合工程.jar包实现了统一的维护.
在这里插入图片描述

4.2 分布式项目中工具API/接口维护

在这里插入图片描述

5.项目京淘搭建

1.父级项目构建

我这使用的是idea开发工具进行开展项目的开发:新建项目工程->选择springInitalizer.
在这里插入图片描述下一步:输入相关信息
在这里插入图片描述下一步:到这一步后,直接下一步即可。
在这里插入图片描述下一步:配置项目名称和项目地址
在这里插入图片描述
直接点finish即可,创建成功后,删除src目录。这为项目父级模块,主要是提供公共jar包,故src无用
在这里插入图片描述在图片我们可能会看到一些其他文件, (当然是可以直接删除的,这些文件在团队项目中会发挥一些作用)
在这里插入图片描述
.gitignore:分布式版本控制系统git的配置文件,意思为忽略提交
mvnw:全名是maven wrapper,它的原理是在maven-wrapper.properties文件中记录你要使用的maven版本,当用户执行mvnw clean 命令时,发现当前用户的maven版本和期望的版本不一致,那么就下载期望的版本,然后用期望的版本来执行mvn命令,比如刚才的mvn clean。
mvn.cmd–执行mvnw命令的cmd入口。
若团队开发使用的是git代码管理工具,那gitignore文件即可发挥作用。其他文件了解即可

2.创建子模块jt-common:在根目录右击鼠标,选择创建module。

在这里插入图片描述还是创建springInitalizer.下一步。这次我们创建的是公共模块。用于存放全局使用接口和工具类。以及其他配置。
在这里插入图片描述
继续默认下一步:
在这里插入图片描述
点击完成。结构如下。既然作为公共模块,删掉启动类。
在这里插入图片描述
进行配置jt-common的pom.xml,删掉依赖地址信息,以及.只保留入图所示相关信息即可
在这里插入图片描述

3.创建后台模块jt-manage,步骤跟上面一样。

在这里插入图片描述在选择依赖时选择如下
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
完成后结构如下
在这里插入图片描述
我们可以看到resources下有三个文件
static文件夹是存放css,js样式文件
templates是存放页面。
这是因为引用了thymeleaf的依赖。springboot的默认情况下页面从此位置进行加载

配置jt-manage的pom.xml
在这里插入图片描述我们知道在默认情况下,parent标签中是引用的springboot的。但在项目中,我们要将其改完本项目的父级信息。只需将根目录下的pom.xml的信息直接复制到这个位置即可。
还有就是公共模块的引用,需要添加依赖。可手动敲,也可用快捷方法:
右击鼠标选择generate,并选择第一项
在这里插入图片描述在这里插入图片描述
在输入框中输入我们的打包名称,即可找到,选中jt-common。点击add即可
在这里插入图片描述在配置总pom.xml文件,需要将其打包方式改为pom

 <packaging>pom</packaging>

添加依赖:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--springBoot动态的引入springMVC全部的配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 引入aop支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <!--引入测试类 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--添加属性注入依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <!--支持热部署 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
            <version>1.2.8.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!--引入插件lombok 自动的set/get/构造方法插件 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--引入数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.15</version>
            <scope>runtime</scope>
        </dependency>

        <!--引入druid数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>

        <!--spring整合mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.6</version>
        </dependency>

        <!--spring整合redis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
        </dependency>

        <!--springBoot整合JSP添加依赖 -->
        <!--servlet依赖 注意与eureka整合时的问题 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <!--添加httpClient jar包 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>

        <!--引入dubbo配置 -->
        <!--<dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>-->

        <!--添加Quartz的支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>
</dependencies>

上述依赖众多,也包含了后续教程使用的相关依赖。
最后填加上模块:

 <modules>
        <module>jt-common</module>
        <module>jt-manage</module>
 </modules>

我们还要将jt-common的打包类型改为jar。jt-manage打包类型改为war包,
这里你也许会有疑问,打包为jar和war有啥区别呢,在这,我埋个伏笔

至此项目搭建成功:
先写个小案例进行测试:
创建controller包,在创建IndexController类

@Controller
public class IndexController {
    @RequestMapping("/index")
    public String index(){
        return "/views/index";
    }
}

style.css样式文件:


.login-title{
    font-size: 30px;
    color: red;

}

home.js创建:

alert("1");

index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="/css/style.css"/>
    <script src="/js/home.js"></script>
</head>
<body>
<h1>HELLO INDEX THYMELEAF</h1>
你好,<h2 th:text="${name}"></h2>
<p class="login-title">哈哈 NBA</p>
</body>
</html>

目录结构
在这里插入图片描述配置application.yml文件,我是自己改了后缀名,主要是为了方便开发效率

server:
  port: 8091
  servlet:
    context-path: /
spring:
  datasource:
    #引入druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    #本项目使用的是MySQL,你可以使用其他的数据库
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root
  thymeleaf:
    #缓冲的配置
    cache: false
    check-template: true
    check-template-location: true
    #开启MVC thymeleaf 视图解析
    enabled: true
    encoding: utf-8
    mode: HTML5
    prefix: classpath:/templates/
    suffix: .html

启动项目:
在这里插入图片描述
github项目地址:https://github.com/lmy1965673628/jingtao.git,进入后进行下载即可
在这里插入图片描述
至此项目搭建成功,今天太晚了,下一篇为正式进入电商项目的实际开发。

发布了4 篇原创文章 · 获赞 1 · 访问量 373

猜你喜欢

转载自blog.csdn.net/qq_37216403/article/details/105257248
今日推荐