真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Dubbo怎么實(shí)現(xiàn)SpringCloud服務(wù)治理

本篇內(nèi)容介紹了“Dubbo怎么實(shí)現(xiàn)Spring Cloud服務(wù)治理 ”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)企業(yè)建站,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對(duì)于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì)中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動(dòng)的思維在網(wǎng)頁中充分展現(xiàn),通過對(duì)客戶行業(yè)精準(zhǔn)市場(chǎng)調(diào)研,為客戶提供的解決方案。

版本支持

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

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

以下表格將說明 Dubbo Spring Cloud 版本關(guān)系映射關(guān)系:

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 構(gòu)建在原生的 Spring Cloud 之上,其服務(wù)治理方面的能力可認(rèn)為是 Spring Cloud Plus,不僅完全覆蓋 Spring Cloud 原生特性,而且提供更為穩(wěn)定和成熟的實(shí)現(xiàn),特性比對(duì)如下表所示:

功能組件

Spring Cloud

Dubbo Spring Cloud

分布式配置(Distributed configuration)

Git、Zookeeper、Consul、JDBC

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

服務(wù)注冊(cè)與發(fā)現(xiàn)(Service registration and discovery)

Eureka、Zookeeper、Consul

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

負(fù)載均衡(Load balancing)

Ribbon(隨機(jī)、輪詢等算法)

Dubbo 內(nèi)建實(shí)現(xiàn)(隨機(jī)、輪詢等算法 + 權(quán)重等特性)

服務(wù)熔斷(Circuit Breakers)

Spring Cloud Hystrix

Spring Cloud Hystrix + Alibaba Sentinel 等(Sentinel 已被 Spring Cloud 項(xiàng)目納為 Circuit Breaker 的候選實(shí)現(xiàn))

服務(wù)調(diào)用(Service-to-service calls)

Open Feign、RestTemplate

Spring Cloud 服務(wù)調(diào)用 + Dubbo @Reference

鏈路跟蹤(Tracing)

Spring Cloud Sleuth + Zipkin 

Zipkin、opentracing 等

高亮特性

Dubbo 使用 Spring Cloud 服務(wù)注冊(cè)與發(fā)現(xiàn)

Dubbo Spring Cloud 基于 Spring Cloud Commons 抽象實(shí)現(xiàn) Dubbo 服務(wù)注冊(cè)與發(fā)現(xiàn),應(yīng)用只需增添外部化配置屬性 “dubbo.registry.address = spring-cloud://localhost”,就能輕松地橋接到所有原生 Spring Cloud 注冊(cè)中心,包括: - Nacos - Eureka - Zookeeper - Consul

注:Dubbo Spring Cloud 將在下個(gè)版本支持 Spring Cloud 注冊(cè)中心與 Dubbo 注冊(cè)中心并存,提供雙注冊(cè)機(jī)制,實(shí)現(xiàn)無縫遷移

Dubbo 作為 Spring Cloud 服務(wù)調(diào)用

默認(rèn)情況,Spring Cloud Open Feign 以及 @LoadBalancedRestTemplate 作為 Spring Cloud 的兩種服務(wù)調(diào)用方式。Dubbo Spring Cloud 為其提供了第三種選擇,即 Dubbo 服務(wù)將作為 Spring Cloud 服務(wù)調(diào)用的同等公民出現(xiàn),應(yīng)用可通過 Apache Dubbo 注解 @Service和 @Reference 暴露和引用 Dubbo 服務(wù),實(shí)現(xiàn)服務(wù)間多種協(xié)議的通訊。同時(shí),也可以利用 Dubbo 泛化接口輕松實(shí)現(xiàn)服務(wù)網(wǎng)關(guān)。

Dubbo 服務(wù)自省

Dubbo Spring Cloud 引入了全新的服務(wù)治理特性 - 服務(wù)自?。⊿ervice Introspection),其設(shè)計(jì)目的在于最大化減輕注冊(cè)中心負(fù)載,去 Dubbo 注冊(cè)元信息中心化。假設(shè)一個(gè) Spring Cloud 應(yīng)用引入 Dubbo Spring Boot Starter,并暴露 N 個(gè) Dubbo 服務(wù),以 Dubbo Nacos 注冊(cè)中心 為例,當(dāng)前應(yīng)用將注冊(cè) N+1 個(gè) Nacos 應(yīng)用,除 Spring Cloud 應(yīng)用本身之前,其余 N 個(gè)應(yīng)用均來自于 Dubbo 服務(wù),當(dāng) N 越大時(shí),注冊(cè)中心負(fù)載越重。

因此,Dubbo Spring Cloud 應(yīng)用對(duì)注冊(cè)中心的負(fù)載相當(dāng)于傳統(tǒng) Dubbo 的 N 分之一,在不增加基礎(chǔ)設(shè)施投入的前提下,理論上,使其集群規(guī)模擴(kuò)大 N 倍。當(dāng)然,未來的 Dubbo 也將提供服務(wù)自省的能力。

Dubbo 遷移 Spring Cloud 服務(wù)調(diào)用

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

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

簡單示例

開發(fā) Dubbo Spring Cloud 應(yīng)用的方法與傳統(tǒng) Dubbo 或 Spring Cloud 應(yīng)用類似,按照以下步驟就能完整地實(shí)現(xiàn)Dubbo 服務(wù)提供方和消費(fèi)方的應(yīng)用,完整的示例代碼請(qǐng)?jiān)L問一下資源:

  • Dubbo 服務(wù)提供方應(yīng)用 

  • Dubbo 服務(wù)消費(fèi)方應(yīng)用 

定義 Dubbo 服務(wù)接口

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

public interface EchoService {


    String echo(String message);
}

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

對(duì)于服務(wù)提供方而言,不僅通過依賴 artifact 的形式引入 Dubbo 服務(wù)接口,而且需要將其實(shí)現(xiàn)。對(duì)應(yīng)的服務(wù)消費(fèi)端,同樣地需要依賴該 artifact,并以接口調(diào)用的方式執(zhí)行遠(yuǎn)程方法。接下來進(jìn)一步討論怎樣實(shí)現(xiàn) Dubbo 服務(wù)提供方和消費(fèi)方。

實(shí)現(xiàn) Dubbo 服務(wù)提供方

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

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


    
    
        org.springframework.cloud
        spring-cloud-dubbo-sample-api
        ${project.version}
    


    
    
        org.springframework.boot
        spring-boot-actuator
    


    
    
        org.springframework.cloud
        spring-cloud-starter-dubbo
    


    
    
        org.springframework.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    

以上依賴 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 服務(wù)注冊(cè)與發(fā)現(xiàn) artifact

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


    
        
        
            org.springframework.cloud
            spring-cloud-alibaba-dependencies
            2.2.1.RELEASE
            pom
            import
        
    

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

完成以上步驟之后,下一步則是實(shí)現(xiàn) Dubbo 服務(wù)。

實(shí)現(xiàn) Dubbo 服務(wù)

EchoService 作為暴露的 Dubbo 服務(wù)接口,服務(wù)提供方 spring-cloud-dubbo-server-sample 需要將其實(shí)現(xiàn):

@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 服務(wù)注解,僅聲明該 Java 服務(wù)(本地)實(shí)現(xiàn)為 Dubbo 服務(wù)。 因此,下一步需要將其配置 Dubbo 服務(wù)(遠(yuǎn)程)。

配置 Dubbo 服務(wù)提供方

在暴露 Dubbo 服務(wù)方面,推薦開發(fā)人員外部化配置的方式,即指定 Java 服務(wù)實(shí)現(xiàn)類的掃描基準(zhǔn)包。

注:Dubbo Spring Cloud 繼承了 Dubbo Spring Boot 的外部化配置特性,也可以通過標(biāo)注 @DubboComponentScan 來實(shí)現(xiàn)基準(zhǔn)包掃描

同時(shí),Dubbo 遠(yuǎn)程服務(wù)需要暴露網(wǎng)絡(luò)端口,并設(shè)定通訊協(xié)議,完整的 YAML 配置如下所示:

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

以上 YAML 內(nèi)容,上半部分為 Dubbo 的配置:

  • dubbo.scan.base-packages : 指定 Dubbo 服務(wù)實(shí)現(xiàn)類的掃描基準(zhǔn)包

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

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

下半部分則是 Spring Cloud 相關(guān)配置:

  • spring.application.name : Spring 應(yīng)用名稱,用于 Spring Cloud 服務(wù)注冊(cè)和發(fā)現(xiàn)。 > 該值在 Dubbo Spring Cloud 加持下被視作 dubbo.application.name,因此,無需再顯示地配置 dubbo.application.name

  • spring.cloud.nacos.discovery : Nacos 服務(wù)發(fā)現(xiàn)與注冊(cè)配置,其中子屬性 server-addr 指定 Nacos 服務(wù)器主機(jī)和端口

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

完成以上步驟后,還需編寫一個(gè) Dubbo Spring Cloud 引導(dǎo)類。

引導(dǎo) Dubbo Spring Cloud 服務(wù)提供方應(yīng)用

Dubbo Spring Cloud 引導(dǎo)類與普通 Spring Cloud 應(yīng)用并無差別,如下所示:

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

在引導(dǎo) DubboSpringCloudServerBootstrap 之前,請(qǐng)?zhí)崆皢?dòng) Nacos 服務(wù)器。 當(dāng) DubboSpringCloudServerBootstrap 啟動(dòng)后,將應(yīng)用 spring-cloud-dubbo-server-sample 將出現(xiàn)在 Nacos 控制臺(tái)界面。

當(dāng) Dubbo 服務(wù)提供方啟動(dòng)后,下一步實(shí)現(xiàn)一個(gè) Dubbo 服務(wù)消費(fèi)方。

實(shí)現(xiàn) Dubbo 服務(wù)消費(fèi)方

由于 Java 服務(wù)就 EchoService、服務(wù)提供方應(yīng)用 spring-cloud-dubbo-server-sample 以及 Nacos 服務(wù)器均已準(zhǔn)備完畢。Dubbo 服務(wù)消費(fèi)方 只需初始化服務(wù)消費(fèi)方 Maven 工程 spring-cloud-dubbo-client-sample 以及消費(fèi) Dubbo 服務(wù)。

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

與服務(wù)提供方 Maven 工程類,需添加相關(guān) Maven 依賴:


    
        
        
            org.springframework.cloud
            spring-cloud-alibaba-dependencies
            2.2.1.RELEASE
            pom
            import
        
    




    
    
        org.springframework.cloud
        spring-cloud-dubbo-sample-api
        ${project.version}
    


    
    
        org.springframework.boot
        spring-boot-starter-web
    


    
        org.springframework.boot
        spring-boot-actuator
    


    
    
        org.springframework.cloud
        spring-cloud-starter-dubbo
    


    
    
        org.springframework.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    

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

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

配置 Dubbo 服務(wù)消費(fèi)方

Dubbo 服務(wù)消費(fèi)方配置與服務(wù)提供方類似,當(dāng)前應(yīng)用 spring-cloud-dubbo-client-sample 屬于純服務(wù)消費(fèi)方,因此,所需的外部化配置更精簡:

dubbo:
  cloud:
    subscribed-services: spring-cloud-alibaba-dubbo-server
    
spring:
  application:
    # Dubbo 應(yīng)用名稱
    name: spring-cloud-alibaba-dubbo-client
  cloud:
    nacos:
      # Nacos 服務(wù)發(fā)現(xiàn)與注冊(cè)配置
      discovery:
        server-addr: 127.0.0.1:8848

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

dubbo.cloud.subscribed-services : 用于服務(wù)消費(fèi)方訂閱服務(wù)提供方的應(yīng)用名稱的列表,若需訂閱多應(yīng)用,使用 "," 分割。 不推薦使用默認(rèn)值為 "*",它將訂閱所有應(yīng)用。

當(dāng)應(yīng)用使用屬性 dubbo.cloud.subscribed-services 默認(rèn)值時(shí),日志中將會(huì)輸出一行警告:

> > 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

由于當(dāng)前應(yīng)用屬于 Web 應(yīng)用,它會(huì)默認(rèn)地使用 8080 作為 Web 服務(wù)端口,如果需要自定義,可通過屬性 server.port 調(diào)整。

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

引導(dǎo) Dubbo Spring Cloud 服務(wù)消費(fèi)方應(yīng)用

為了減少實(shí)現(xiàn)步驟,以下引導(dǎo)類將 Dubbo 服務(wù)消費(fèi)以及引導(dǎo)功能合二為一:

@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 服務(wù),消費(fèi) Dubbo EchoService服務(wù)。因此, 可通過 curl 命令執(zhí)行 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 響應(yīng)為:

[echo] Hello, 小馬哥(mercyblitz)

以上結(jié)果說明應(yīng)用 spring-cloud-dubbo-client-sample 通過消費(fèi) Dubbo 服務(wù),返回服務(wù)提供方 spring-cloud-dubbo-server-sample 運(yùn)算后的內(nèi)容。

“Dubbo怎么實(shí)現(xiàn)Spring Cloud服務(wù)治理 ”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


網(wǎng)頁題目:Dubbo怎么實(shí)現(xiàn)SpringCloud服務(wù)治理
分享URL:http://weahome.cn/article/jjocho.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部