中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Dubbo怎么實現Spring Cloud服務治理

發布時間:2022-01-04 15:59:01 來源:億速云 閱讀:148 作者:iii 欄目:大數據

本篇內容介紹了“Dubbo怎么實現Spring Cloud服務治理 ”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

版本支持

由于 Spring 官方宣布 Spring Cloud Edgware(下文簡稱為 “E” 版) 將在 2019 年 8 月 1 日后停止維護13,因此,目前 Dubbo Spring Cloud 發布版本并未對 “E” 版提供支持,僅為 “F” 版 和 “G” 版開發,同時也建議和鼓勵 Spring Cloud 用戶更新至 “F” 版 或 “G” 版。

同時,Dubbo Spring Cloud 基于 Apache Dubbo Spring Boot 2.7.x 開發(最低 Java 版本為 1.8),提供完整的 Dubbo 注解驅動、外部化配置以及 Production-Ready 的特性,點擊查看詳情。

以下表格將說明 Dubbo Spring Cloud 版本關系映射關系:

Spring Cloud

Spring Cloud Alibaba

Spring Boot

Dubbo Spring Boot

Finchley

0.2.2.RELEASE

2.0.x

2.7.1

Greenwich

2.2.1.RELEASE

2.1.x

2.7.1

Edgware

0.1.2.RELEASE

1.5.x

:x: Dubbo Spring Cloud 不支持該版本

功能特性

由于 Dubbo Spring Cloud 構建在原生的 Spring Cloud 之上,其服務治理方面的能力可認為是 Spring Cloud Plus,不僅完全覆蓋 Spring Cloud 原生特性,而且提供更為穩定和成熟的實現,特性比對如下表所示:

功能組件

Spring Cloud

Dubbo Spring Cloud

分布式配置(Distributed configuration)

Git、Zookeeper、Consul、JDBC

Spring Cloud 分布式配置 + Dubbo 配置中心(Dubbo 2.7 開始支持配置中心,可自定義適配)

服務注冊與發現(Service registration and discovery)

Eureka、Zookeeper、Consul

Spring Cloud 原生注冊中心(Spring Cloud 原生注冊中心,除 Eureka、Zookeeper、Consul 之外,還包括 Spring Cloud Alibaba 中的 Nacos)+ Dubbo 原生注冊中心

負載均衡(Load balancing)

Ribbon(隨機、輪詢等算法)

Dubbo 內建實現(隨機、輪詢等算法 + 權重等特性)

服務熔斷(Circuit Breakers)

Spring Cloud Hystrix

Spring Cloud Hystrix + Alibaba Sentinel 等(Sentinel 已被 Spring Cloud 項目納為 Circuit Breaker 的候選實現)

服務調用(Service-to-service calls)

Open Feign、RestTemplate

Spring Cloud 服務調用 + Dubbo @Reference

鏈路跟蹤(Tracing)

Spring Cloud Sleuth + Zipkin 

Zipkin、opentracing 等

高亮特性

Dubbo 使用 Spring Cloud 服務注冊與發現

Dubbo Spring Cloud 基于 Spring Cloud Commons 抽象實現 Dubbo 服務注冊與發現,應用只需增添外部化配置屬性 “dubbo.registry.address = spring-cloud://localhost”,就能輕松地橋接到所有原生 Spring Cloud 注冊中心,包括: - Nacos - Eureka - Zookeeper - Consul

注:Dubbo Spring Cloud 將在下個版本支持 Spring Cloud 注冊中心與 Dubbo 注冊中心并存,提供雙注冊機制,實現無縫遷移

Dubbo 作為 Spring Cloud 服務調用

默認情況,Spring Cloud Open Feign 以及 @LoadBalancedRestTemplate 作為 Spring Cloud 的兩種服務調用方式。Dubbo Spring Cloud 為其提供了第三種選擇,即 Dubbo 服務將作為 Spring Cloud 服務調用的同等公民出現,應用可通過 Apache Dubbo 注解 @Service和 @Reference 暴露和引用 Dubbo 服務,實現服務間多種協議的通訊。同時,也可以利用 Dubbo 泛化接口輕松實現服務網關。

Dubbo 服務自省

Dubbo Spring Cloud 引入了全新的服務治理特性 - 服務自省(Service Introspection),其設計目的在于最大化減輕注冊中心負載,去 Dubbo 注冊元信息中心化。假設一個 Spring Cloud 應用引入 Dubbo Spring Boot Starter,并暴露 N 個 Dubbo 服務,以 Dubbo Nacos 注冊中心 為例,當前應用將注冊 N+1 個 Nacos 應用,除 Spring Cloud 應用本身之前,其余 N 個應用均來自于 Dubbo 服務,當 N 越大時,注冊中心負載越重。

因此,Dubbo Spring Cloud 應用對注冊中心的負載相當于傳統 Dubbo 的 N 分之一,在不增加基礎設施投入的前提下,理論上,使其集群規模擴大 N 倍。當然,未來的 Dubbo 也將提供服務自省的能力。

Dubbo 遷移 Spring Cloud 服務調用

盡管 Dubbo Spring Cloud 完全地保留了原生 Spring Cloud 服務調用特性,不過 Dubbo 服務治理的能力是 Spring Cloud Open Feign 所不及的,如高性能、高可用以及負載均衡穩定性等方面。因此,建議開發人員將 Spring Cloud Open Feign 或者 @LoadBalancedRestTemplate 遷移為 Dubbo 服務。

考慮到遷移過程并非一蹴而就,因此,Dubbo Spring Cloud 提供了方案,即 @DubboTransported 注解。該注解能夠幫助服務消費端的 Spring Cloud Open Feign 接口以及 @LoadBalanced RestTemplate Bean 底層走 Dubbo 調用(可切換 Dubbo 支持的協議),而服務提供方則只需在原有 @RestController 類上追加 Dubbo @Servce 注解(需要抽取接口)即可,換言之,在不調整 Feign 接口以及 RestTemplate URL 的前提下,實現無縫遷移。如果遷移時間充分的話,建議使用 Dubbo 服務重構系統中的原生 Spring Cloud 服務的定義。

簡單示例

開發 Dubbo Spring Cloud 應用的方法與傳統 Dubbo 或 Spring Cloud 應用類似,按照以下步驟就能完整地實現Dubbo 服務提供方和消費方的應用,完整的示例代碼請訪問一下資源:

  • Dubbo 服務提供方應用 

  • Dubbo 服務消費方應用 

定義 Dubbo 服務接口

Dubbo 服務接口是服務提供方與消費方的遠程通訊契約,通常由普通的 Java 接口(interface)來聲明,如 EchoService 接口:

public interface EchoService {


    String echo(String message);
}

為了確保契約的一致性,推薦的做法是將 Dubbo 服務接口打包在第二方或者第三方的 artifact(jar)中,如以上接口就存放在 artifact spring-cloud-dubbo-sample-api 之中。

對于服務提供方而言,不僅通過依賴 artifact 的形式引入 Dubbo 服務接口,而且需要將其實現。對應的服務消費端,同樣地需要依賴該 artifact,并以接口調用的方式執行遠程方法。接下來進一步討論怎樣實現 Dubbo 服務提供方和消費方。

實現 Dubbo 服務提供方

初始化 spring-cloud-dubbo-server-sample Maven 工程

首先,創建 artifactId 名為 spring-cloud-dubbo-server-sample 的 Maven 工程,并在其 pom.xml 文件中增添 Dubbo Spring Cloud 必要的依賴:

<dependencies>
    <!-- Sample API -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dubbo-sample-api</artifactId>
        <version>${project.version}</version>
    </dependency>


    <!-- Spring Boot dependencies -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-actuator</artifactId>
    </dependency>


    <!-- Dubbo Spring Cloud Starter -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-dubbo</artifactId>
    </dependency>


    <!-- Spring Cloud Nacos Service Discovery -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependencie

以上依賴 artifact 說明如下:

  • spring-cloud-dubbo-sample-api : 提供 EchoService接口的 artifact

  • spring-boot-actuator : Spring Boot Production-Ready artifact,間接引入 spring-boot artifact

  • spring-cloud-starter-dubbo : Dubbo Spring Cloud Starter artifact,間接引入 dubbo-spring-boot-starter 等 artifact

  • spring-cloud-starter-alibaba-nacos-discovery : Nacos Spring Cloud 服務注冊與發現 artifact

值得注意的是,以上 artifact 未指定版本(version),因此,還需顯示地聲明 <dependencyManagement> :

<dependencyManagement>
    <dependencies>
        <!-- Spring Cloud Alibaba dependencies -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

注:以上完整的 Maven 依賴配置,請參考 spring-cloud-dubbo-server-sample pom.xml 文件

完成以上步驟之后,下一步則是實現 Dubbo 服務。

實現 Dubbo 服務

EchoService 作為暴露的 Dubbo 服務接口,服務提供方 spring-cloud-dubbo-server-sample 需要將其實現:

@org.apache.dubbo.config.annotation.Service
class EchoServiceImpl implements EchoService {


    @Override
    public String echo(String message) {
        return "[echo] Hello, " + message;
    }
}

其中,@org.apache.dubbo.config.annotation.Service 是 Dubbo 服務注解,僅聲明該 Java 服務(本地)實現為 Dubbo 服務。 因此,下一步需要將其配置 Dubbo 服務(遠程)。

配置 Dubbo 服務提供方

在暴露 Dubbo 服務方面,推薦開發人員外部化配置的方式,即指定 Java 服務實現類的掃描基準包。

注:Dubbo Spring Cloud 繼承了 Dubbo Spring Boot 的外部化配置特性,也可以通過標注 @DubboComponentScan 來實現基準包掃描

同時,Dubbo 遠程服務需要暴露網絡端口,并設定通訊協議,完整的 YAML 配置如下所示:

dubbo:
  scan:
    # dubbo 服務掃描基準包
    base-packages: org.springframework.cloud.alibaba.dubbo.bootstrap
  protocol:
    # dubbo 協議
    name: dubbo
    # dubbo 協議端口( -1 表示自增端口,從 20880 開始)
    port: -1
    
spring:
  application:
    # Dubbo 應用名稱
    name: spring-cloud-alibaba-dubbo-server
  cloud:
    nacos:
      # Nacos 服務發現與注冊配置
      discovery:
        server-addr: 127.0.0.1:8848

以上 YAML 內容,上半部分為 Dubbo 的配置:

  • dubbo.scan.base-packages : 指定 Dubbo 服務實現類的掃描基準包

  • dubbo.protocol : Dubbo 服務暴露的協議配置,其中子屬性 name 為協議名稱,port 為協議端口( -1 表示自增端口,從 20880 開始)

  • dubbo.registry : Dubbo 服務注冊中心配置,其中子屬性 address 的值 "spring-cloud://localhost",說明掛載到 Spring Cloud 注冊中心

下半部分則是 Spring Cloud 相關配置:

  • spring.application.name : Spring 應用名稱,用于 Spring Cloud 服務注冊和發現。 > 該值在 Dubbo Spring Cloud 加持下被視作 dubbo.application.name,因此,無需再顯示地配置 dubbo.application.name

  • spring.cloud.nacos.discovery : Nacos 服務發現與注冊配置,其中子屬性 server-addr 指定 Nacos 服務器主機和端口

以上完整的 YAML 配置文件,請參考 spring-cloud-dubbo-server-samplebootstrap.yaml 文件

完成以上步驟后,還需編寫一個 Dubbo Spring Cloud 引導類。

引導 Dubbo Spring Cloud 服務提供方應用

Dubbo Spring Cloud 引導類與普通 Spring Cloud 應用并無差別,如下所示:

 @EnableDiscoveryClient @EnableAutoConfiguration public class DubboSpringCloudServerBootstrap {
public static void main(String[] args) {
    SpringApplication.run(DubboSpringCloudServerBootstrap.class);
}
}

在引導 DubboSpringCloudServerBootstrap 之前,請提前啟動 Nacos 服務器。 當 DubboSpringCloudServerBootstrap 啟動后,將應用 spring-cloud-dubbo-server-sample 將出現在 Nacos 控制臺界面。

當 Dubbo 服務提供方啟動后,下一步實現一個 Dubbo 服務消費方。

實現 Dubbo 服務消費方

由于 Java 服務就 EchoService、服務提供方應用 spring-cloud-dubbo-server-sample 以及 Nacos 服務器均已準備完畢。Dubbo 服務消費方 只需初始化服務消費方 Maven 工程 spring-cloud-dubbo-client-sample 以及消費 Dubbo 服務。

初始化 spring-cloud-dubbo-client-sample Maven 工程

與服務提供方 Maven 工程類,需添加相關 Maven 依賴:

<dependencyManagement>
    <dependencies>
        <!-- Spring Cloud Alibaba dependencies -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2.2.1.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>


<dependencies>
    <!-- Sample API -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dubbo-sample-api</artifactId>
        <version>${project.version}</version>
    </dependency>


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


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


    <!-- Dubbo Spring Cloud Starter -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-dubbo</artifactId>
    </dependency>


    <!-- Spring Cloud Nacos Service Discovery -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
</dependenc

與應用 spring-cloud-dubbo-server-sample 不同的是,當前應用依賴 spring-boot-starter-web,表明它屬于 Web Servlet 應用。

注:以上完整的 Maven 依賴配置,請參考 spring-cloud-dubbo-client-sample pom.xml 文件

配置 Dubbo 服務消費方

Dubbo 服務消費方配置與服務提供方類似,當前應用 spring-cloud-dubbo-client-sample 屬于純服務消費方,因此,所需的外部化配置更精簡:

dubbo:
  cloud:
    subscribed-services: spring-cloud-alibaba-dubbo-server
    
spring:
  application:
    # Dubbo 應用名稱
    name: spring-cloud-alibaba-dubbo-client
  cloud:
    nacos:
      # Nacos 服務發現與注冊配置
      discovery:
        server-addr: 127.0.0.1:8848

對比應用 spring-cloud-dubbo-server-sample,除應用名稱 spring.application.name 存在差異外,spring-cloud-dubbo-client-sample 新增了屬性 dubbo.cloud.subscribed-services 的設置,并且該值為服務提供方應用 "spring-cloud-dubbo-server-sample"。

dubbo.cloud.subscribed-services : 用于服務消費方訂閱服務提供方的應用名稱的列表,若需訂閱多應用,使用 "," 分割。 不推薦使用默認值為 "*",它將訂閱所有應用。

當應用使用屬性 dubbo.cloud.subscribed-services 默認值時,日志中將會輸出一行警告:

> > Current application will subscribe all services(size:x) in registry, a lot of memory and CPU cycles may be used,

> > thus it's strongly recommend you using the externalized property 'dubbo.cloud.subscribed-services' to specify the services

由于當前應用屬于 Web 應用,它會默認地使用 8080 作為 Web 服務端口,如果需要自定義,可通過屬性 server.port 調整。

注:以上完整的 YAML 配置文件,請參考 spring-cloud-dubbo-client-samplebootstrap.yaml 文件

引導 Dubbo Spring Cloud 服務消費方應用

為了減少實現步驟,以下引導類將 Dubbo 服務消費以及引導功能合二為一:

@EnableDiscoveryClient
@EnableAutoConfiguration
@RestController
public class DubboSpringCloudClientBootstrap {


    @Reference
    private EchoService echoService;


    @GetMapping("/echo")
    public String echo(String message) {
        return echoService.echo(message);
    }


    public static void main(String[] args) {
        SpringApplication.run(DubboSpringCloudClientBootstrap.class);
    }

不僅如此,DubboSpringCloudClientBootstrap 也作為 REST Endpoint,通過暴露 /echo Web 服務,消費 Dubbo EchoService服務。因此, 可通過 curl 命令執行 HTTP GET 方法:

$ curl http://127.0.0.1:8080/echo?message=%E5%B0%8F%E9%A9%AC%E5%93%A5%EF%BC%88mercyblitz%EF%BC%89

HTTP 響應為:

[echo] Hello, 小馬哥(mercyblitz)

以上結果說明應用 spring-cloud-dubbo-client-sample 通過消費 Dubbo 服務,返回服務提供方 spring-cloud-dubbo-server-sample 運算后的內容。

“Dubbo怎么實現Spring Cloud服務治理 ”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿瓦提县| 河间市| 二连浩特市| 土默特左旗| 三亚市| 迁安市| 孙吴县| 朔州市| 泊头市| 库尔勒市| 炎陵县| 山东省| 神池县| 安龙县| 婺源县| 安岳县| 开化县| 万山特区| 界首市| 永顺县| 鄂州市| 称多县| 胶州市| 雷州市| 新源县| 青铜峡市| 阿拉善左旗| 普兰店市| 宾阳县| 元谋县| 高阳县| 疏勒县| 山阳县| 四会市| 故城县| 玛纳斯县| 高陵县| 张家界市| 霸州市| 罗平县| 平定县|