Spring Cloud Alibaba 實戰(一)準備篇

白菜Java自習室 涵蓋核心知識java

Spring Cloud Alibaba 實戰(一)準備篇
Spring Cloud Alibaba 實戰(二)Nacos篇
Spring Cloud Alibaba 實戰(三)Sentinel篇
Spring Cloud Alibaba 實戰(四)Oauth2篇
Spring Cloud Alibaba 實戰(五)Zuul篇
Spring Cloud Alibaba 實戰(六)RocketMQ篇
Spring Cloud Alibaba 實戰(七)Seata篇
Spring Cloud Alibaba 實戰(八)SkyWalking篇
mysql

項目 GitHub 地址:github.com/D2C-Cai/her…
git

1. Spring Cloud Alibaba 簡介

Spring Cloud Alibaba 致力於提供微服務開發的一站式解決方案。此項目包含開發分佈式應用微服務的必需組件,方便開發者經過 Spring Cloud 編程模型輕鬆使用這些組件來開發分佈式應用服務。github

依託 Spring Cloud Alibaba,您只須要添加一些註解和少許配置,就能夠將 Spring Cloud 應用接入阿里微服務解決方案,經過阿里中間件來迅速搭建分佈式應用系統。web

1.1. 主要功能

  • 服務限流降級:默認支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud Gateway, Zuul, Dubbo 和 RocketMQ 限流降級功能的接入,能夠在運行時經過控制檯實時修改限流降級規則,還支持查看限流降級 Metrics 監控。
  • 服務註冊與發現:適配 Spring Cloud 服務註冊與發現標準,默認集成了 Ribbon 的支持。
  • 分佈式配置管理:支持分佈式系統中的外部化配置,配置更改時自動刷新。
  • 消息驅動能力:基於 Spring Cloud Stream 爲微服務應用構建消息驅動能力。
  • 分佈式事務:使用 @GlobalTransactional 註解, 高效而且對業務零侵入地解決分佈式事務問題。
  • 阿里雲對象存儲:阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。支持在任何應用、任什麼時候間、任何地點存儲和訪問任意類型的數據。
  • 分佈式任務調度:提供秒級、精準、高可靠、高可用的定時(基於 Cron 表達式)任務調度服務。同時提供分佈式的任務執行模型,如網格任務。網格任務支持海量子任務均勻分配到全部 Worker(schedulerx-client)上執行。
  • 阿里雲短信服務:覆蓋全球的短信服務,友好、高效、智能的互聯化通信能力,幫助企業迅速搭建客戶觸達通道。

1.2. 主要組件

  • Sentinel:把流量做爲切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
  • Nacos:一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。
  • RocketMQ:一款開源的分佈式消息系統,基於高可用分佈式集羣技術,提供低延時的、高可靠的消息發佈與訂閱服務。
  • Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架。
  • Seata:阿里巴巴開源產品,一個易於使用的高性能微服務分佈式事務解決方案。
  • Alibaba Cloud OSS: 阿里雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。您能夠在任何應用、任什麼時候間、任何地點存儲和訪問任意類型的數據。
  • Alibaba Cloud SchedulerX: 阿里中間件團隊開發的一款分佈式任務調度產品,提供秒級、精準、高可靠、高可用的定時(基於 Cron 表達式)任務調度服務。
  • Alibaba Cloud SMS: 覆蓋全球的短信服務,友好、高效、智能的互聯化通信能力,幫助企業迅速搭建客戶觸達通道。

1.3. 版本管理規範

項目的版本號格式爲 x.x.x 的形式,其中 x 的數值類型爲數字,從 0 開始取值,且不限於 0~9 這個範圍。項目處於孵化器階段時,第一位版本號固定使用 0,即版本號爲 0.x.x 的格式。redis

因爲 Spring Boot 1 和 Spring Boot 2 在 Actuator 模塊的接口和註解有很大的變動,且 spring-cloud-commons 從 1.x.x 版本升級到 2.0.0 版本也有較大的變動,所以咱們採起跟 SpringBoot 版本號一致的版本:spring

  • 1.5.x 版本適用於 Spring Boot 1.5.x
  • 2.0.x 版本適用於 Spring Boot 2.0.x
  • 2.1.x 版本適用於 Spring Boot 2.1.x
  • 2.2.x 版本適用於 Spring Boot 2.2.x

2. 主要內容

Spring Cloud Alibaba 實戰系列教程目前一共會分爲如下幾個部分,教你們如何使用docker部署服務,實戰應用分佈式套件:sql

組件 功能
Nacos 動態服務發現、配置管理
Sentinel 流量控制、熔斷降級、系統負載保護
Seata 高性能微服務分佈式事務
RocketMQ 高可用分佈式消息系統
Zuul+Oauth2 分佈式網關鑑權系統
SkyWalking 分佈式鏈路追蹤與監控系統

3. 準備工做

本系列教程專門開篇來介紹準備工做,來減小你們在實戰過程當中的疑惑。以實戰爲主,基本原理爲輔,具體深刻原理分析將會另外開篇,敬請期待。docker

3.1. 極速安裝 Docker 環境

  • 安裝 Docker

Docker 的 安裝資源文件 存放在Amazon S3,會間歇性鏈接失敗。因此安裝Docker的時候,會比較慢。 你能夠經過執行下面的命令,高速安裝Docker。適用於Ubuntu,Debian,Centos等大部分Linux,會3小時同步一次Docker官方資源。數據庫

curl -sSL https://get.daocloud.io/docker | sh
複製代碼
  • 安裝 Docker Compose

Docker Compose 存放在Git Hub,不太穩定。你能夠也經過執行下面的命令,高速安裝Docker Compose。你能夠經過修改URL中的版本,能夠自定義您的須要的版本。

curl -L https://get.daocloud.io/docker/compose/releases/download/1.28.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
複製代碼
chmod +x /usr/local/bin/docker-compose
複製代碼
  • 配置 Docker 鏡像站

配置 Docker 鏡像站*。該腳本能夠將 --registry-mirror 加入到你的 Docker 配置文件 /etc/docker/daemon.json 中。適用於 Ubuntu14.0四、Debian、CentOS6 、CentOS七、Fedora、Arch Linux、openSUSE Leap 42.1,其餘版本可能有細微不一樣。

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
複製代碼

3.2. 創建一個初始項目

首先,起一個本身的項目名字,這裏教程統一叫作:herring(鯡魚)

herring-xxx 之因此在中間件的項目上包一層,是由於不少企業級開發須要本身的二次封裝。項目的建法仁者見仁,智者見智,讀者沒必要過於糾結,按照本身的習慣創建便可。

主項目 第一層 第二層 項目說明
herring herring-alibaba herring-nacos 動態服務發現、配置管理
herring-sentinel 流量控制、熔斷降級、系統負載保護
herring-seata 高性能微服務分佈式事務
herring-rocketmq 高可用分佈式消息系統
herring-common herring-feign 聲明式的 web service 客戶端
herring-mysql 數據庫選擇 mysql
herring-redis 分佈式緩存選擇 redis
herring-tools 經常使用工具包 jwt, lombok 等
herring-services herring-base 服務基礎客戶端 nacos, sentinel, skywalking 的客戶端
herring-base-tx 服務事務相關客戶端 seata, rocketmq 的客戶端
herring-product 自建實驗微服務(你能夠本身隨便建)
herring-member 自建實驗微服務(你能夠本身隨便建)
herring-orders 自建實驗微服務(你能夠本身隨便建)
herring-security herring-oauth2 oauth2.0 安全認證服務
herring-gateway zuul 分佈式網關服務
herring-skywalking 分佈式鏈路追蹤與監控系統
  • 選擇項目框架的版本約定:
主項目 第一層
spring-boot 2.2.3.RELEASE
spring-cloud Hoxton.SR5
spring-cloud-alibaba 2.2.3.RELEASE
  • 父級項目版本的約定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>org.jackey</groupId>
    <artifactId>herring</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <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>
        <java.version>1.8</java.version>
        <spring-cloud-alibaba.version>2.2.3.RELEASE</spring-cloud-alibaba.version>
        <spring-cloud.version>Hoxton.SR5</spring-cloud.version>
        <spring-boot.version>2.2.3.RELEASE</spring-boot.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.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>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
複製代碼

3.3. 使用 Docker 快速安裝 MySQL 5.7

拉取 MySQL 5.7 版本的鏡像

docker pull daocloud.io/library/mysql:5.7.4
複製代碼

啓動 MySQL 5.7 鏡像的容器,注意設置初始密碼 和 映射數據存檔目錄

docker run --name mysql_5.7 -v /docker/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=(你的root密碼) -d daocloud.io/library/mysql:5.7.4
複製代碼

3.3. 使用 Docker 快速安裝 Redis 3.2

拉取 Redis 3.2 版本的鏡像

docker pull daocloud.io/library/redis:3.2.8
複製代碼

啓動 Redis 3.2 鏡像的容器,注意設置持久化參數 和 映射數據存檔目錄

docker run --name redis_3.2 -v /docker/redis/data:/data -p 6379:6379 -d daocloud.io/library/redis:3.2.8 redis-server --appendonly yes
複製代碼

Spring Cloud Alibaba 實戰(一)準備篇
Spring Cloud Alibaba 實戰(二)Nacos篇
Spring Cloud Alibaba 實戰(三)Sentinel篇
Spring Cloud Alibaba 實戰(四)Oauth2篇
Spring Cloud Alibaba 實戰(五)Zuul篇
Spring Cloud Alibaba 實戰(六)RocketMQ篇
Spring Cloud Alibaba 實戰(七)Seata篇
Spring Cloud Alibaba 實戰(八)SkyWalking篇

項目 GitHub 地址:github.com/D2C-Cai/her…

相關文章
相關標籤/搜索