一文了解帶有Dubbo的Spring Cloud Alibaba

通過優銳課核心java學習筆記中,我們可以看到,碼了很多專業的相關知識, 分享給大家參考學習。

看一下如何在阿里巴巴的Spring Cloud實現中使用這個流行的RPC框架。

Spring Cloud Alibaba

Spring Cloud Alibaba是Alibaba Cloud的Spring Cloud版本。 它由幾個阿里巴巴的開源項目Nacos,Sentinel和RocketMQ以及幾個阿里雲原生商業產品組成,以增強用戶在阿里雲上的體驗。 Spring Cloud Alibaba的新版本還將提供Dubbo作爲RPC選擇。

Dubbo是一個經過嚴格實踐的RPC框架。 在另一篇文章中,我演示瞭如何將其與註釋一起使用。 該示例使用的是Spring Boot。 Dubbo與Spring Boot緊密集成。 將Dubbo放在Spring Cloud Alibaba上似乎很自然。

在本文中,我們將使用一個簡單的echo示例來說明在Spring Cloud Alibaba上使用Dubbo的步驟。

定義Dubbo接口

首先定義一個接口:

public interface EchoService {

    String echo(String message);

}

 

該接口將向遠程客戶端公開。 這裏的提示是將此接口打包到第二或第三方工件(jar)中,以便該jar可用於spring-cloud-dubbo-sample-api。

實施Dubbo服務

Maven中創建一個項目

讓我們用artifactIdId spring-cloud-dubbo-server-sample創建一個Maven項目。 然後,將依賴項添加到pom.xml中。

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

</dependencies>

 

在上面的pom.xml中:

· spring-cloud-dubbo-sample-api:這是工件ID

· spring-boot-actuator:這是Spring Boot生產就緒的工件

· spring-cloud-starter-dubbo:這是Dubbo Spring Cloud Starter工件

· spring-cloud-starter-alibaba-nacos-discovery:這是Nacos Spring Cloud服務註冊表工件

在繼續之前,我們需要在定義中添加一個版本:

<dependencyManagement>

    <dependencies>

        <!-- Spring Cloud Alibaba dependencies -->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-alibaba-dependencies</artifactId>

            <version>0.9.0.RELEASE</version>

            <type>pom</type>

            <scope>import</scope>

        </dependency>

    </dependencies>

  </dependencyManagement>

 

服務代碼實施

這是實現的Java代碼:

@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服務。

配置Dubbo服務

建議的公開服務的方法是使用@DubboComponentScanannotation。

該配置涉及兩個部分:Dubbo和Spring Cloud。

dubbo:

  scan:

    base-packages: org.springframework.cloud.alibaba.dubbo.bootstrap

  protocol:

    name: dubbo

    # -1 means self-defined

    port: -1

  registry:

    address: spring-cloud://localhost

spring:

  application:

    name: spring-cloud-alibaba-dubbo-server

  main:

    allow-bean-definition-overriding: true

  cloud:

    nacos:

      # Nacos

      discovery:

        server-addr: 127.0.0.1:8848

 

Spring Boot應用程序類

這與其他Spring Boot應用程序類相同:

@EnableDiscoveryClient

@EnableAutoConfiguration

public class DubboSpringCloudServerBootstrap {

    public static void main(String[] args) {

        SpringApplication.run(DubboSpringCloudServerBootstrap.class);

    }

}

 

這裏唯一值得一提的是,我們應該在此之前啓動Nacos服務,以便Nacos可以發現該服務。

實施Dubbo客戶

創建spring-cloud-dubbo-client-sample Maven項目

與服務端配置類似,我們需要指定依賴項:

<dependencyManagement>

    <dependencies>

        <!-- Spring Cloud Alibaba dependencies -->

        <dependency>

            <groupId>org.springframework.cloud</groupId>

            <artifactId>spring-cloud-alibaba-dependencies</artifactId>

            <version>0.9.0.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>

</dependencies>

 

與服務端的主要區別在於客戶端將是一個使用spring-boot-starter-web的Web Servlet應用程序。

配置客戶端

與服務端類似,配置分爲兩個部分:Dubbo和Spring。

dubbo:

  registry:

    address: spring-cloud://localhost

  cloud:

    subscribed-services: spring-cloud-alibaba-dubbo-server

spring:

  application:

    # Dubbo

    name: spring-cloud-alibaba-dubbo-client

  main:

    # Spring Boot 2.1

    allow-bean-definition-overriding: true

  cloud:

    nacos:

      # Nacos

      discovery:

        server-addr: 127.0.0.1:8848

 

在這裏,我們通過將dubbo.cloud.subscribed-services綁定到spring-cloud-dubbo-server-sample來指定要使用的服務。

· dubbo.cloud.subscribed-services:要訂閱多個服務,請使用“,”作爲分隔符。 

由於它是一個Web應用程序,因此默認端口爲8080。 可以通過修改server.port屬性來更改。

Spring Boot應用程序類和實現Java代碼

分爲兩個步驟:

@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);

    }

}

 

由於這是一個Web客戶端,因此我們可以使用curl進行嘗試。 如果我們跑

curl http://127.0.0.1:8080/echo?message=yourmessage

 

或者我們可以運行Java客戶端來獲得相同的結果。

We should see the result [echo] Hello, yourmessage

 

結論

Spring Cloud阿里巴巴現在有兩個發行版,其中包括Dubbo。 它們是與Spring Cloud Finchley兼容的0.2.2版本和與Spring Cloud Greenwich兼容的0.9.0版本。 無論是嘗試適應Spring Cloud阿里巴巴的Dubbo用戶,還是相反,經驗都應該是無縫的。

 

> 喜歡這篇文章的可以點個贊,歡迎大家留言評論,記得關注我,每天持續更新技術乾貨、職場趣事、海量面試資料等等

 > 如果你對java技術很感興趣也可以交流學習,共同學習進步。 

> 不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代


文章寫道這裏,歡迎完善交流。最後奉上近期整理出來的一套完整的java架構思維導圖,分享給大家對照知識點參考學習。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java乾貨


微信圖片_20200227100004.png微信圖片_20200225115155.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章