1. 程式人生 > 其它 >【Dubbo】SpringBoot 整合 Dubbo 示例

【Dubbo】SpringBoot 整合 Dubbo 示例

技術標籤:# Dubbodubbo

因為 Dubbo 的依賴中引入了 Spring 相關 Jar 包,所以使用 Dubbo 預設是基於 Spring 的,在前面的文章我們介紹瞭如何 Dubbo 進行遠端通訊和服務治理,那麼,本篇我們就來看看如何使用 SpringBoot 整合。

建立三個單獨模組,分別表示 api,provider,consumer。

在這裡插入圖片描述

1.dubbo-api

/**
*要暴露的服務
*/
public interface ISayHelloService {
    String sayHello();
}

2.dubbo-provider

1)引入依賴

<dependencies
>
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</
artifactId
>
<scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions
>
</dependency> <!-- 服務介面 --> <dependency> <groupId>com.xupt.yzh</groupId> <artifactId>dubbo-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.2</version> </dependency> <!-- dubbo 自動裝配相關內容--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.1</version> </dependency> <!-- 註冊中心Zk客戶端 --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.1</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.0.1</version> </dependency> </dependencies>

2)實現服務

// 這個@Service是dubbo的提供的,表示暴露服務Bean
// 也可以在@Service(loadbalance=)進行相關配置
@Service 
public class SayHelloServiceImpl implements ISayHelloService {
    @Override
    public String sayHello() {
        return "Hello Dubbo...";
    }
}

3)配置服務內容

dubbo.scan.base-packages=com.xupt.yzh.dubboprovider
dubbo.application.name=dubbo-springboot
dubbo.registry.address=zookeeper://43.107.136.120:2181

幾點注意:

  1. SpringBoot 預設採用dubbo協議與20880埠,所以 dubbo.protocol.name 與 dubbo.protocol.port 可以不顯式配置
  2. dubbo.application.name 必須配置,其作用在於多節點提供同一服務時起標識作用
    • 在註冊中心 zookeeper 中,服務節點的名稱仍然是介面全類名,application.name 儲存在臨時節點的 url 中(通過&拼接)
    • 如果在 com…ISayHelloService 下有多個節點(代表多種服務實現),那麼 applicaiton.name 可以在呼叫方的@Reference(application=“ ‘)進行指定
  3. dubbo.scan.base-packages 必須配置了才能掃描

4)啟動服務

啟動服務後可以在 zookeeper 中看相關服務是否已經註冊

在這裡插入圖片描述

3.dubbo-client

1)引入依賴

這裡同 provider,但一般還會引入 web-starter,因為消費端一般會包含 Controller,提供 web 訪問

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>com.xupt.yzh</groupId>
        <artifactId>dubbo-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo</artifactId>
        <version>2.7.2</version>
    </dependency>

    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-framework</artifactId>
        <version>4.0.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.0.1</version>
    </dependency>
</dependencies>

2)遠端呼叫服務

@RestController
public class DubboController {
	
    // Dubbo提供的註解,標識根據服務名獲取相應服務Bean
    // 也可以在@Reference(loadbalance=)進行相關配置
    @Reference 
    ISayHelloService sayHelloService;

    @GetMapping("/sayHello")
    public String sayHello() {
        // 呼叫服務提供方法
        return sayHelloService.sayHello();
    }
}

3)配置服務內容

與provider相同

dubbo.registry.address=zookeeper://43.107.136.120:2181
dubbo.scan.base-packages=com.xupt.yzh.dubboclient
dubbo.application.name=dubbo-springboot-client

4.啟動服務

啟動後可以在web端進行訪問

在這裡插入圖片描述

本篇相關程式碼我放到 GitHub 上了,有需要參考的同學點選這裡跳轉…