SpringCloud初探


一、微服务

微服务,又叫微服务架构,是一种软件架构方式。它将应用构建成一系列按业务领域划分模块的、小的自治服务。
微服务架构提倡将一个单一的应用程序拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间使用轻量级通信机制(通常是 HTTP RESTFUL API)进行通讯。

特点:

  • 解耦:同一个系统的服务大部分都可以解耦,可以轻易的构建、扩展
  • 组件化:微服务可以看做相互独立的组件,可以轻易替换和升级
  • 错误隔离:某个服务发生了故障,整个系统可以继续工作
  • 混合技术栈:可以使用不同的语言和技术来为同一个应用构建不同的服务

二、SpringCloud

1.什么是SpringCloud

SpringCloud:分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体
它提供了一套简单易用的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务系统的构建
Spring Cloud 包括 Spring Cloud Gateway、Spring Cloud Config、Spring Cloud Bus 等近 20 个服务组件,这些组件提供了服务治理、服务网关、智能路由、负载均衡、熔断器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。

SpringCloud有两代实现:

  • 第一代实现:Spring Cloud Netflix
  • 第二代实现:Spring Cloud Alibaba

2. SpringCloud的版本

为了避免SpringCloud版本号与子项目版本号混淆, SpringCloud版本采用 了名称而非版本号的命名,这些版本的名字采用了伦敦地铁站的名字,根据字母表的顺序来对应版本时间顺序。例如Ange|是第一个版本, Brixton是第二个版本。
当SpringCloud的发布内容积累到临界点或者一个重大BUG被解决后, 会发布一个"service releases"版本,简称SRX版本,比如Greenwich.SR2就是SpringCloud发布的Greenwich版本的第2个SRX版本。

从2020年开始SpringCloud改回用年号命名版本号 ,比如Spring Cloud 2020.0.1

3.SpringBoot与SpringCloud的区别与联系

  1. 分工不同
    SpringBoot是基于Spring的快速开发框架,专注于快速、方便的开发单个微服务
    SpringCloud是微服务的大管家,负责将SpringBoot开发的微服务管理起来。
  2. 依赖数量不同
    SpringBoot属于轻量级框架,构建工程所需要的依赖少
    SpringCloud是一系列微服务框架的集合体,每个组件都需要独立的依赖项
  3. Spring Cloud 是基于 Spring Boot 实现的
  4. Spring Cloud 不能脱离 Spring Boot 单独运行
    SpringCloud不能独立的创建工程或模块,不能脱离Spring Boot 单独运行
    Spring Boot 能够用于开发单个微服务,但它并不具备管理和协调微服务的能力

SpringBoot与SpringCloud的版本对应关系:

官方网站:http://spring.io/projects/spring-cloud
如果项目中使用Spring Cloud Alibaba,也需要配置Alibaba 的版本
git:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
JSON版版本对应关系:https://start.spring.io/actuator/info
在这里插入图片描述

4.阿里微服务架构案例

在这里插入图片描述

5.SpringCloud 的组件

目前停更、依旧火热的组件
在这里插入图片描述

三、SpringCloud环境搭建

1.创建微服务cloud整体聚合父工程Project

New Project -> maven工程 -> create from archetype: maven-archetype-site

2.父工程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.heng</groupId>
  <artifactId>cloud2020test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Maven</name>
  <!-- 统一管理jar包版本 -->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <junit.version>4.12</junit.version>
    <log4j.version>1.2.17</log4j.version>
    <lombok.version>1.16.18</lombok.version>
    <mysql.version>5.1.47</mysql.version>
    <druid.version>1.1.16</druid.version>
    <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
  </properties>

  <!-- 1、只是声明依赖,并不实际引入,子项目按需声明使用的依赖 -->
  <!-- 2、子项目可以继承父项目的 version 和 scope -->
  <!-- 3、子项目若指定了 version 和 scope,以子项目为准 -->
  <dependencyManagement>
    <dependencies>
      <!--spring boot 2.2.2-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.2.2.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Hoxton.SR1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${mysql.version}</version>
      </dependency>
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${druid.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${mybatis.spring.boot.version}</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
      </dependency>
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <optional>true</optional>
      </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>
(1)更改<packaging> 为pom是什么意思
POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元
pom的意思是项目里没有java代码,也不执行任何代码,只是为了聚合工程或传递依赖用的
配置<packaging>pom</packaging>的意思是使用maven分模块管理,都会有一个父级项目,pom文件一个重要的属性就是packaging(打包类型),一般来说所有的父级项目的packaging都为pom
packaging默认类型jar类型,如果不做配置,maven会将该项目打成jar包。

项目的打包类型:pom、jar、war
  packing默认是jar类型,
  pom ---------> 父类型都为pom类
  jar ---------> 内部调用或者是作服务使用
  war ---------> 需要部署的项目

(2)DependencyManagement的作用
Maven使用dependencyManagement元素来提供了一种管理依赖版本号的方式。
使用pom.xml中的dependencyManagement元素能让所有在子项目中引用个依赖而不用显式的列出版本量。
当子项目声明依赖,并且没有指定具体的版本,Maven会向父工程寻找,直到找到dependencyManagement元素,然后它会使用这个元素中指定的版本号。

注意:如果子项目中指定了版本号,那么会使用子项目中指定的jar版本
注意:dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。

3.创建微服务模块

  1. 建Module
  2. 改POM
  3. 写YML
  4. 主启动
  5. 业务类
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贫僧洗发爱飘柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值