Spring Cloud Alibaba入门

一、什么是Spring Cloud Alibaba

1.1 概述
  • 是阿里巴巴旗下结合自身微服务开发实践,开源的微服务全家桶解决方案。
  • 在微服务Spring Cloud项目中进行孵化和诞生,在未来可能会成为第二代标准的微服务架构。
  • 现在在很多的大企业里流行使用,比如:百度、爱奇艺、阿里、虎牙直播、平安科技、贝壳找房等。
1.2 应用场景
  • 大型分布式架构系统,比如大型电商、金融
  • 高并发的系统,比如:门户、直播、秒杀等系统
  • 需求不明确,需要更新迭代的创业性公司的系统
  • 新零售、微信小程序的后台电商架构

二、Spring Cloud和Spring Cloud Alibaba的关系

Spring Cloud Alibaba 其实是对Spring Cloud 微服务的最佳实践,也就是Srping Cloud的一个子项目,不过它在Spring Cloud的基础上完成了很多新组件和优化的工作,因为在Spring Cloud 2.x以后官网很多的产品都即将停更或已停更,Spring Cloud Alibaba在这基础上做了很多的替代解决方案,如下:

Spring Cloud Alibaba组件

三、什么是单体架构与微服务架构

3.1 单体架构概述

把所有的业务模块都堆砌在一个系统中,然后把系统打成一个war包或者jar包运行在应用服务器中

3.1.1 单体架构的优点
  • 架构单一、容易维护
  • 开发、测试、部署比较便捷
3.1.2 单体架构的缺点
  • 复杂度高
  • 部署慢,体积大,不利于发布
  • 占用服务器资源过大
  • 阻碍新的技术创新
3.2 微服务架构概述

微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制,通常用http资源的api来实现,这些服务围绕业务能力构建并且可通过全自动部署机制独立部署,这些服务公用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。

3.2.1 微服务架构的特征
  • 每个微服务可独立运行在自己的进程里
  • 一系列独立运行的微服务共同构建起整个系统
  • 每个微服务可独立开发,在开发过程中只关注一个业务模块的特定功能,比如支付服务,订单管理,用户管理等等
  • 可使用不同的语言与数据存储技术(契合项目情况和团队实力)
  • 为服务器直接通过轻量级的通信机制进行通信,比如:Rest API进行调用
  • 全自动的部署机制
3.2.2 微服务架构的优点
  • 单个服务更易于开发、维护
  • 单个服务启动比较快,部署也快,消耗的服务器资源更少
  • 技术栈不受限制
3.2.2 微服务架构的缺点
  • 运维要求高
  • 分布式服务固有的复杂度
3.3 什么样子的场景适合用微服务
  • 大型项目
  • 有快速迭代的要求
  • 访问压力过大的网站
3.4 什么样子的网站不适合微服务
  • 业务稳定
  • 迭代周期长
3.5 微服务拆分的方法论
  • DDD领域驱动设计
  • 面向对象驱动设计
  • 按照职责划分,比如订单模块、搜索模块等
  • 通用性划分。把一些通用功能做成微服务,比如用户中心,支付中心,消息中心等。比如阿里流行的大中台和小中台的概念,一个中台其实是由若干个微服务组成的。
3.6 微服务设计的合理性
  • 满足业务的后续的扩展和延展
  • 满足团队的成员的职业和技术的发展
  • 可以稳步的迭代和更新你的业务
  • 可以持续的更新或者调整你的技术架构,以及完全的可靠和抽离

四、构建微服务项目

4.1 创建工程
4.1.1 新建父工程[mallcloud]
新建Project
选择maven工程
项目名字
删除src,添加配置
4.1.2 新建一个[user-service]工程

选中mallcloud项目,选择新建module

新建module
选择maven工程
module名称
4.1.3 新建一个[order-service]工程

和创建user-service一样创建order-service

order-service

创建完成后的项目结构


创建完成后的项目结构
4.2 添加相关依赖

参考地址:Spring Cloud Alibaba官网

4.2.1 父工程[mallcloud]添加依赖

在父工程 [mallcloud] pom.xml中引入SpringBoot、Spring Cloud 和Spring Cloud Alibaba相关依赖,如下

<?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>org.alanchen</groupId>
    <artifactId>mallcloud</artifactId>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>users-service</module>
        <module>order-service</module>
    </modules>

    <packaging>pom</packaging>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
        <mysql.version>8.0.17</mysql.version>
        <mybatis.plus.version>3.2.0</mybatis.plus.version>
        <druid.version>1.1.10</druid.version>
        <boot.version>2.2.4.RELEASE</boot.version>
        <alibaba.cloud.version>2.1.0.RELEASE</alibaba.cloud.version>
    </properties>

    <!-- 管理子类所有的jar包的版本,这样的目的是方便去统一升级和维护 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${alibaba.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${mybatis.plus.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

        </dependencies>

    </dependencyManagement>

    <!-- 所有的子工程都会自动加入下面的依赖  -->
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.10</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <!-- SpringBoot 工程编译打包的插件,放在父pom中就直接给所有子工程继承 -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
4.2.2 [order-service]添加依赖
<?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">
    <parent>
        <artifactId>mallcloud</artifactId>
        <groupId>org.alanchen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>order-service</artifactId>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>6</source>
                    <target>6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

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

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

</project>
4.2.3 [user-service]添加依赖
<?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">
    <parent>
        <artifactId>mallcloud</artifactId>
        <groupId>org.alanchen</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>users-service</artifactId>

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

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

</project>
4.3 [order-service] & [user-service]通信demo
4.3.1 [user-service] 提供查询用户接口
user-service
4.3.2 [order-service] 下单并远程调用[user-service]用户查询接口
order-service

Demo地址

Spring Cloud Alibaba官网

资料来源:SpringCloud和Spring Cloud Alibaba

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352