SpringCloud升級之路2020.0.x版-6.微服務特性相關的依賴說明


本系列代碼地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford

image

spring-cloud-common 不再是一個純依賴的項目,這個模塊包括:

  1. spring-framework-common 的依賴
  2. 同步與異步微服務公共的依賴
  3. 同步與異步微服務公共的框架代碼改造,這個我們后面分析框架以及我們設計的修改的時候,會詳細分析,這里先跳過

同步與異步微服務公共的依賴包括

代碼請參考:https://github.com/HashZhang/spring-cloud-scaffold/blob/master/spring-cloud-iiford/spring-cloud-iiford-spring-cloud-common/pom.xml

1.啟用 Spring Cloud 的 Bootstrap Context:在 Spring Cloud 2020.0.x 版本開始,Bootstrap Context 默認不再啟用。我們的項目,某些模塊使用了 spring-cloud-config,這個是需要啟用 Bootstrap Context 的。同時,我們的配置,還通過 bootstrap.ymlapplication.yml 區分了不同配置,如果多環境中配置是一樣並且基本不會動態更改的則放入 bootstrap.yml,不同環境不同或者可能動態修改則放入 application.yml。所以通過加入如下依賴來啟用:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

這個底層實現非常簡單,是否啟用 Bootstrap Context 是通過檢查這個依賴中的 Marker 類是否存在而決定的。參考代碼:

PropertyUtils.java

/**
 * Property name for bootstrap marker class name.
 */
public static final String MARKER_CLASS = "org.springframework.cloud.bootstrap.marker.Marker";

/**
 * Boolean if bootstrap marker class exists.
 */
public static final boolean MARKER_CLASS_EXISTS = ClassUtils.isPresent(MARKER_CLASS, null);

2.使用 Eureka 作為注冊中心,我們需要添加 Eureka 的客戶端依賴:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

3.不使用 Ribbon,使用 Spring Cloud LoadBalancer 作為我們的負載均衡器

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

4.使用 resilience4j 作為重試、斷路、限並發、限流的組件基礎

<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-spring-cloud2</artifactId>
</dependency>

5.暴露 actuator 相關端口

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

6.使用 prometheus 進行指標監控采集

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

image

spring-cloud-webmvc 是針對基於同步 spring-mvc 的微服務的依賴,同樣的,spring-cloud-webmvc 也包含同步微服務公共的框架代碼改造,這個我們后面分析框架以及我們設計的修改的時候,會詳細分析,這里先跳過。我們這里先只說明依賴:

代碼請參考:https://github.com/HashZhang/spring-cloud-scaffold/blob/master/spring-cloud-iiford/spring-cloud-iiford-spring-cloud-webmvc/pom.xml

1.spring-cloud-common 的依賴:之前提到過 spring-cloud-common 是 spring-cloud-webmvc 與 spring-cloud-webflux 的公共依賴。

2.使用 undertow 作為我們的 web 容器:web-mvc 默認的容器是 tomcat,需要排除這個依賴,並添加 undertow 相關依賴。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

3.使用 webflux 相關異步接口,某些微服務主要基於同步接口,但有一些特殊的接口使用的異步響應式實現,這個並不會發生沖突,所以在這里我們也添加了 web-flux 依賴。

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

4.使用 OpenFeign 作為同步微服務調用客戶端,OpenFeign 目前主要還是作為同步客戶端使用,雖然目前也有異步實現,但是功能與粘合代碼還不完整,異步的我們還是會使用 WebClient。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

5.粘合 OpenFeign 與 resilience4j 的代碼依賴,官方提供了 OpenFeign 與 resilience4j 粘合代碼,請參考:resilience4j-feign。我們會在此基礎上做一些個性化改造,后面我們會詳細分析。

<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-feign</artifactId>
</dependency>

image

spring-cloud-webmvc 是針對基於異步響應式 spring-webflux 的微服務的依賴,同樣的,spring-cloud-webflux 也包含異步微服務公共的框架代碼改造,這個我們后面分析框架以及我們設計的修改的時候,會詳細分析,這里先跳過。我們這里先只說明依賴:

代碼請參考:https://github.com/HashZhang/spring-cloud-scaffold/blob/master/spring-cloud-iiford/spring-cloud-iiford-spring-cloud-webflux/pom.xml

1.spring-cloud-common 的依賴:之前提到過 spring-cloud-common 是 spring-cloud-webmvc 與 spring-cloud-webflux 的公共依賴。

2.使用 webflux 作為我們的 web 容器,這里我們不需要額外 web 容器。

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

3.粘合 project-reactor 與 resilience4j,這個在異步場景經常會用到,請參考:resilience4j-reactor

<dependency>
    <groupId>io.github.resilience4j</groupId>
    <artifactId>resilience4j-reactor</artifactId>
</dependency>

本小節我們分析了我們項目中的微服務公共依賴以及基於 web-mvc 同步的微服務依賴和基於 web-flux 異步的微服務依賴。下一節我們將從一些 Spring 基礎開始,逐步深入分析我們的 Spring Cloud 框架。

微信搜索“我的編程喵”關注公眾號,每日一刷,輕松提升技術,斬獲各種offer


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM