第四阶段----day01

一.什么是微服务?

  • 答:微服务架构MSA 额基础是 将单个应用程序开发为一组小型独立服务,这些独立服务在自己的进程中运行,独立开发和部署.
    这些服务使用轻量级 API 通过明确定义的接口进行通信。这些服务是围绕业务功能构建的,每项服务执行一项功能。由于它们是独立运行的,因此可以针对各项服务进行更新、部署和扩展,以满足对应用程序特定功能的需求。
    程序中的微服务,就是将各个业务系统的共性再进行抽取,做成独立的服务,如图所示:
    在这里插入图片描述
    总之,微服务是分布式系统中的一种流行的架构模型,也不要寄希望于微服务构架能够解决所有的问题。微服务架构主要解决的是如何快速地开发和部署我们的服务,这对于一个能够适应快速开发和成长的公司是非常必要的

二.SpringCloud Alibaba微服务解决方案

1.概念

Spring Cloud Alibaba 是Spring Cloud(微服务头牌)的一个子项目,致力于提供微服务开发的一站式解决方案

2.核心组件

  • 服务限流降级:
    默认支持 WebServlet、OpenFeign、RestTemplate、Spring Cloud Gateway, RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
  • 服务注册与发现:
    基于Spring Cloud 服务注册与发现标准,借助Nacos进行实现,默认还集成了 Ribbon 的支持。
  • 分布式配置管理:
    基于Nacos支持分布式系统中的外部化配置,配置更改时自动刷新。
  • 消息驱动能力:
    基于Spring Cloud Stream 为微服务应用构建消息驱动能力。
  • 分布式事务:
    使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
  • 分布式任务调度:
    提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker上执行

三.构建springCloud聚合项目 并进行环境初始化

1.工程结构

微服务一般都采用聚合工程结构,可以实现共享资源的复用,简化项目的管理方式

2.创建空项目

打开idea,创建一个空项目,比如:
在这里插入图片描述
在这里插入图片描述
可以将此文件作为一个工作区,类似磁盘中的一个空的文件夹

3.项目初始化配置

  • 第一步:配置maven环境,只要是新的工作区,都必须重新配置,注意本地库选择新的位置,不要与其他项目共用本地库,因为多个项目所依赖的版本不同,可能会有一些依赖版本的冲突
    在这里插入图片描述
  • 第二步:配置jdk编译环境
    在这里插入图片描述
    在这里插入图片描述
  • 第三步:配置工作区中项目编码格式
    在这里插入图片描述

四.创建聚合父工程

我们在后续在创建微服务工程进行学习时,相关服务依赖板块的管理,公共依赖,项目编译,打包设计等都可以放在此工程下,进行统一的配置,然后实现共享

  • 第一步:创建父工程模块
    在这里插入图片描述在这里插入图片描述
  • 第二步:删除工程中的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>com.jt</groupId>
    <artifactId>01-sca</artifactId>

    <version>1.0-SNAPSHOT</version>
<!--第一步: 定义子工程中核心依赖的版本管理(注意,只是版本管理)-->
<dependencyManagement>
	<dependencies>
 <!--spring boot 核心依赖版本定义(spring官方定义)-->
 		 <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
	<!--Spring Cloud 微服务规范(由spring官方定义)-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR9</version>
                <type>pom</type><!--假如scope是import,type必须为pom-->
                <scope>import</scope><!--引入三方依赖的版本设计-->
            </dependency>
	 <!--Spring Cloud alibaba 依赖版本管理 (参考官方说明)-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
	</dependencies>
</dependencyManagement>
<!--第二步: 添加子工程的所需要的公共依赖-->
    <dependencies>
        <!--lombok 依赖,子工程中假如需要lombok,不需要再引入-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope><!--provided 表示此依赖仅在编译阶段有效-->
        </dependency>
        <!--单元测试依赖,子工程中需要单元测试时,不需要再次引入此依赖了-->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope><!--test表示只能在test目录下使用此依赖-->
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--其它依赖...-->
    </dependencies>
    <!--第三步: 定义当前工程模块及子工程的的统一编译和运行版本-->
    <build><!--项目构建配置,我们基于maven完成项目的编译,测试,打包等操作,
    都是基于pom.xml完成这一列的操作,但是编译和打包的配置都是要写到build元素
    内的,而具体的编译和打包配置,又需要plugin去实现,plugin元素不是必须的,maven
    有默认的plugin配置,常用插件可去本地库进行查看-->
        <plugins>
            <!--通过maven-compiler-plugin插件设置项目
            的统一的jdk编译和运行版本-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                 <!--假如本地库没有这个版本,这里会出现红色字体错误-->
                <version>3.8.1</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

其中服务依赖版本可以参考如下网址:(涉及到兼容性问题,不能随意指定其版本)

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

五.创建服务提供方案

创建服务提供方工程:继承父工程,例如:
在这里插入图片描述

六.创建服务消费方模块

创建服务消费方工程,继承父工程,例如:
在这里插入图片描述

七 创建API网关服务模块

创建网关工程,这个工程后续作为API服务访问入口,继承父工程,例如:
在这里插入图片描述

八.服务关系以及调用关系

在这里插入图片描述

九 总结

微服务 是一种架构设计方式,每个服务都是根据一组功能而设计的,专注于解决特定的问题,如果一个服务,变动越来越复杂,那么就可以拆分成多项更小的服务,接下来进行独立的开发,测试,部署,运行,维护,进而更好,更灵活的处理客户端的请求并提高系统的可靠性,可扩展性。

十.微服务核心知识点:

  1. 微服务架构诞生的背景
    答:服务多了太臃肿,要拆分成若干个小系统,分而治之
  2. 我服务架构的解决方案:
    答:大厂基本自研,自己研发各种组件,中小公司用SpringCloud Netfix ,SpringCloudAlibaba
  3. 微服务架构下,Maven项目的创建方式:
    答:maven聚合项目,资源复用:extends,import,简化编译,打包,部署方式
  4. 微服务架构入门,聚合项目分析及创建;
    答:01-sca,sca-consumer,sca-provider,sca-gateway

十一:常见问题分析:

  1. 为什么要有微服务?
    答:对系统分而治之,解决因并发访问过大带来的系统复杂性, 例如:业务,开发,测试,升级,可靠性等
  2. 微服务设计的特点:
    答:单一职责,独立进程,开发测试效率高,可靠性高,升级难度小,但是会带来一定的维护成本
  3. 微服务的解决方案有哪些?
    答:大厂自研,中小企业采用开源的spring cloud alibaba或者spring cloud netfix
  4. 微服务设计中需要那些关键组件?
    答:服务的注册,发现,配置,限流降级,访问入口管理,分布式事务管理等
  5. 创建聚合工程的目的:
    答:实现工程之间的资源共享,简化工程的管理
  6. 如何修改聚合工程中项目的编译和运行版本?
    答:pom.xml–>build–>plugins–>plugin–>maven–>compiler–>plugin
  7. maven工程中build元素的作用:
    答:定义项目的编译,打包方式
  8. maven父工程中packing元素的内的值是什么?
    答:父工程默认打包方式为pom方式
  9. maven父工程中dependencyManagement元素的作用是什么?
    答:定义当前父工程项目版本的依赖,当前工程或者子工程不需要再指定版本
  10. maven父工程中.如何统一定义jdk编译和运行版本?
    答:配置maven编译插件:maven-compiler-plugin
  11. maven工程pom.xml文件有删除线怎么解决?
    答:修改idea中maven的配置

十二:常见bug分析

  1. maven配置错误
    答:检查idea中指定的maven 的路径,本地库路径是否正确
  2. maven依赖无法下载
    答:首先要确保依赖是正确的,maven配置是正确的,都正确那就清除idea缓存重启

十三:课堂练习常见操作

  • 删除聚合工程中的子工程木模块
    1.第一步:在项目结构中删除:
    在这里插入图片描述
    2.第二步:将项目从idea工作区中删除:
    在这里插入图片描述
    3.第三步,将项目从父工程的pom文件中删除:
    在这里插入图片描述
    4.第四步:移除重建项目module中的pom文件删除线
    在这里插入图片描述

  • 构建01-sca的子工程maven模块,模块名为sca-ui,其具体业务实现如下;
    1.第一步:在sca-ui的pom文件中添加一个spring-boot-starter-web依赖

<dependencies>
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>

2.第二步:在sca-ui工程中创建一个springboot启动类,类全名为com.jt.DemoUIApplication.

package com.jt;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoUIApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoUIApplication.class, args);
    }
}

3.第三步:在sca-ui工程的resources目录下创建一个static目录,并在此目录中创建一个index.html页面
在这里插入图片描述
4.第四步:启动sca-ui工程,在浏览器中输入http://localhost:8080/index.html进行测试.
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值