前言

博客自从搭起来零零碎碎的也写了点东西,但是都水的不行,依旧发挥了自己练习多年的CV大法,每篇看着都水的不行。最重要的是大部分都没有动脑子,缺少自己的想法,看着就不像自己的东西。

来培训了快半年了,东西嘛也多少学到点,就是还是和以前一样没有努力,Java基础、高级到后面框架,都是得过且过。欠的都是要还的,最近再学最后的秒杀项目,学到现在说实话,不懂,一点也不懂。本来打算周末的时候就着手写博客梳理、复习一下的,可是,我这该死的拖延症!!!!!

不过现在能开始也不是太迟嘛(自我安慰我一直是可以的),接下来主要目标就是把这个秒杀项目搞懂,其中穿插一些复习,还有一个月就要去面试了,压力太大了,这次就好好加油吧。


OK,让我把我男神刘少的视频打开再跟着他好好学习秒杀项目

秒杀项目介绍

前端-》请求-负载均衡(nginx)-网关(zuul)-> eureka server-》配置(config-server)-》用户、商品、秒杀的微服务-消息中间件-websocket

image-20220307131823424

首先是秒杀项目的基本内容,大体内容:负载均衡、网关、eureka、配置、不同的微服务、消息中间件、web socket。

项目搭建梳理

秒杀项目和之前的所有项目都不同,秒杀项目创建时要创建父子级项目

搭建微服务项目时,我们需要把公共的部分抽出来放在一个项目中,使用依赖的方式进行引用

父项目:

  • shop-parent [pom]

    子项目:

    • eureka-server [jar] 服务注册,可运行的项目就是jar

    • config-server [jar] 配置中心,需要连接码云,配置信息放在码云上进行托管

    • zuul-server [jar] 网关

    • shop-common [jar] 公共部分

    • redis-spring-boot-start [jar] 自定义的start,以前写过

    • shop-provider [pom]

      子子项目

      • member-server [jar] 用户微服务
      • good-server [jar] 商品微服务
      • seckill-server [jar] 秒杀微服务
    • shop-provider-api [pom]

      • member-api[jar] 用户微服务

      • good-api[jar] 商品微服务

      • seckill-api[jar] 秒杀微服务

其次就还有fronted-server [jar]前端和websocket-server [jar]消息通知中心两个项目,我们的秒杀项目就是由这些项目构成的。


到这里我得停一下,短短的项目搭建梳理就开始😵了,这里先梳理一下有问题的地方。

秒杀项目到底是什么项目?

要我现在说,我只能说秒杀项目就是微服务项目(spring cloud),那这样说之前学习的spring boot又是什么呢(秒杀项目中的启动类注解还有@SpringBootApplication😥)

首先,我们要遵守程序,把spring boot 和 spring cloud两个基本概念找出来

spring boot 用来简化配置的它可以简化spring应用程序的创建和开发过程。

spring cloud 是分布式开发的解决方案,基于spring boot,在spring boot做较少的配置。

看到这,反正我没太懂(之前基础太差,全忘了我🤡),能得出的结论是spring bootspring cloud 两者相辅相成(废话🤣)。

百度找了一圈终于找到能让我理解的解释了:

image-20220307175307436

说的一下就让我明白了,果然牛的人不是懂技术的,是懂技术,还能讲出来,并且能让小白听懂。这里的问题解决了,那在我们搭建的项目中pomjar两者的关系又是什么呢😟?

项目中pomjar两者的关系又是什么?

刘少说的是jar是可以运行的项目,而pom项目不需要写Java代码,所以创建项目后src文件夹可以删除,而pom项目也不执行任何代码,只是为了聚合工程或传递依赖用的。

项目搭建

父项目

shop-parent

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!--当前为springboot项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/>
</parent>


<groupId>cn.shop.cloud</groupId>
<artifactId>shop-parent</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging><!--当前项目为pom项目-->

<!--spring-cloud.version 要找到对应的版本Greenwich.SR1-->
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>

<!--版本仲裁-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

子项目

eureka-server

image-20220307213721670

当我们在父项目shop-parent [pom]下创建子项目时,父项目pom.xml中就会自动添加依赖,而子项目的pom.xml中也不需要写spring boot相关的依赖,由父项目传递相应的依赖(子承父业👶🧔)

1
2
3
4
5
6
7
<!--开启服务中心-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
application.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server:
# 配置端口
port: 8761
eureka:
instance:
# 应用实例主机名
hostname: localhost
client:
# 是否从Eureka获取注册信息
fetch-registry: false
# 是否向注册中心注册自己
register-with-eureka: false
service-url:
# Eureka服务器的地址,类型为HashMap,缺省的Key为 defaultZone;缺省的Value为http://localhost:8761/eureka
# 如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。
defualtZone: http://${eureka.instance.hostname}:${server.port}/eureka

Spring Cloud Eureka 之常用配置解析

EurekaServerApp(服务注册与发现中心)
1
2
3
4
5
6
7
@SpringBootApplication //springboot启动类
@EnableEurekaServer //将项目作为SpringCloud中的注册中心
public class EurekaServerApp {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApp.class,args);
}
}

刚写完这些又去刷手机了,罪过罪过,还是要控制住自己,以上的是eureka.server项目中基本的配置,简单几个文件里就有好多迷惑的地方(真是欠的债都要慢慢还呀😩),简单说一下其中的困惑,慢慢去百度解决吧。

父项目和子项目中pom配置与依赖还好,说是工作后不用自己写(希望吧😕就业压力山大),而其中application.yml的用处以及和之前的内容还有迷惑的地方,还有就是EurekaServerApp里面的两个注解,虽然知道他的用法,但是知道地详细点也没坏处(注解还得好好复习😵知其然还要知其所以然)

application.yml的用处

yml之前使用最多的配置文件形式是xmlproperties文件。xml文件太过繁琐,看过的人都知道,想要新加一个配置节点的话还需要包含在<>标签里;而properties配置文件没有了标签,不过当你的配置有很多层级的时候,写完之后你会发现会有大量重复的代码。而yml/yaml文件结合了两者的优势,当你新增节点配置的时候,不需要标签,在写多层级配置的时候也不会产生重复代码。

EurekaServerApp注解

在这里就多说了看这里

config-server