学习SpringCldu的第一天

目录

什么是微服务

SpringCloud Alibaba微服务解决方案

核心组件

解决方案的架构设计

构建 SpringCloud聚合项目

父子类的pom.xml的配置

配置spring boot:


什么是微服务

微服务架构(MSA)的基础是将单个应用程序开发为一组小型独立服务,这些独立服务在自己的进程中运行,独立开发和部署。这些独立服务使用轻量级的api通过定义的接口进行通信。这些服务是围绕业务功能构建的,每项服务执行一项功能。由于他们是独立运行的,因此可以根据各项服务进行更新、部署和扩展,以满足对应功能特定程序的需求。

程序中的微服务就是将各个业务系统的共性进行抽取,做成独立的服务,如图:

在这里插入图片描述

总之,微服务是分布式系统中的一种流行的架构模型,它并不是银弹,所以,也不要寄希望于微服务构架能够解决所有的问题。微服务架构主要解决的是如何快速地开发和部署我们的服务,这对于一个能够适应快速开发和成长的公司是非常必要的。同时,微服务设计中有很多很不错的想法和理念,通过学习微服务架构我们可以更快的迈向卓越。
 

SpringCloud Alibaba微服务解决方案

Spring Cloud Alibaba 是Spring Cloud的一个子项目,致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

核心组件

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

解决方案的架构设计

 基于Spring Cloud Alibaba实现的微服务,解决方案设计架构如图所示:

构建 SpringCloud聚合项目

首先创建一个空项目

配置环境:1.maven环境,2.字节编码utf-8,3.指定当前版本的jdk编译版本及其编译环境

创建父类Module     01-sca

修改pom.xml文件;

<dependencyManagement>
    <dependencies>
        <!--Spring Boot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.3.2.RELEASE</version>
            <type>pom</type><!--允许scope的值为import时,type的值必须pom-->
            <scope>import</scope> <!--这里的import类似java中的import-->
        </dependency>
        <!--Spring Cloud (Spring Cloud 工程依赖于spring boot),
        spring cloud中定义的是一些微服务规范。-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR9</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!--Spring Cloud Alibaba (这套依赖是基于Spring Cloud规范,做了具体的落地实现)-->
        <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>
<!--定义公共依赖(lombok,test)-->
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <!--springboot 2.2以后版本默认单元测试使用的是junit5,
            所以junit4以前的测试引擎不在需要-->
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>
<!--定义统一编译运行环境(jdk)-->
<build>
    <plugins>
        <!--定义maven的编译插件-->
        <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>

<dependencyManagement></dependencyManagement>:常用于Maven聚合工程,在父工程中,将所有需要依赖的坐标写到这个标签之间,即只声明依赖。 在子模块中,需要什么坐标,就写到 <dependencies>标签之间,且不用写版本,因为父工程中已经有声明依赖的版本,如果不想使用已有的版本,可以在添加自己的版本。子模块项目会自动引用依赖。
<dependencies></dependencies>:如果子项目的 <dependencies> 标签的子标签 <dependency> 里面没有写 <version> 标签,那么 maven 就会自动到父项目的 <dependencyManagement> 标签里面去找有没有对该 artifactId 和 groupId 进行过版本声明,如果有,就继承它,如果没有就会报错,告诉你 <dependency> 标签里面必须写一个 <version> 标签
如果子项目的 <dependencies> 标签的子标签 <dependency> 里面写了 <version> 标签并指定了具体的版本,那么无论父项目的 <dependencyManagement> 标签中有无对该 jar 包的 version 声明,都以子项目的 version 为准

<dependency></dependency>:依赖添加标签

<groupId></groupId>:组id,jar包所在的地址

<artifactId></artifactId>:映入jar包的名字和位置

<version></version>:所依赖jar包的版本信息

<type></type> :里的值默认值是jar表示引入的是jar包,这里使用的是pom表示导入的是父模块;
<scope></scope>:中的值import代表把父模块中的jar包导入进来,scope指所属的作用范围,

他在spring   ioc中也作为注解使用,单例多例设置就使用的@Scope

<exclusions></exclusions>:排除依赖,比如文中的junit4依赖过旧,不适合微服务,那么我们就要用依赖排除来出去junit4版本,这样就不会出现jar包导入错误的问题。

<build></build>:定义jdk统一的运行时环境(文章中当前的build只编译了部分)

创建子类Module     sca-common

创建子类Module     sca-consumer

创建子类Module     sca-gateway

创建子类Module     sca-provider

父子类的pom.xml的配置

(1).当四个子类都创建好之后,在01-sca的pom.xml中会自动出现如图所示:

 当需要删除某一个modules时,需要删除pom.xml中的module属性,然后再删除项目文件,当需要重新创建同名的文件时,需要注意:(如果出现对勾,需要取消对勾,再创建文件)

 (2)父类配置好的依赖项,子类依然可以使用,子类不再需要配置该依赖,但是子类配置过的依赖项,父类不能使用。

配置spring boot:

当你想要在普通的测试类中调用项目中的对象,需要把项目中的对象交给spring管理(使用注解@Component),创建启动类springbootApplication(使用注解@SpringBootApplication)

创建springboot测试类(使用注解@SpringBootTest),把对象依赖注入到测试类中(使用注解@Autowired),编辑测试方法进行测试。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值