Spring Boot+Dubbo 入門


Dubbo 架構

Dubbo 架構

一:zookeeper 環境安裝搭建

1、搭建 zookeeper 之前要確保當前的機器已經有 JDK 環境。

2、將 conf 目錄下 zoo_sample.cfg 文件重命名為 zoo.cfg

二 :實現服務接口 dubbo-interface

主要分為下面幾步:

  1. 創建 Maven 項目;
  2. 創建接口類
  3. 將項目打成 jar 包供其他項目使用

項目結構:

dubbo-interface項目結構

dubbo-interface 后面被打成 jar 包,它的作用只是提供接口。

1. dubbo-interface 項目創建

File->New->Module... ,然后選擇 Maven類型的項目,其他的按照提示一步一步走就好。

第一步

第二步

2. 創建接口類

package com.fengx.service;

/**
 * @author: Fengx
 * @date: 2021-07-21
 * @description: 服務接口
 **/
public interface HelloService {

    String sayHello(String name);
}

3. 將項目打成 jar 包供其他項目使用

點擊右邊的 Maven Projects 然后選擇 install ,這樣 jar 包就打好了。

三 :實現服務提供者 dubbo-provider

主要分為下面幾步:

  1. 創建 springboot 項目;
  2. 加入 dubbo 、zookeeper以及接口的相關依賴 jar 包;
  3. 在 application.properties 配置文件中配置 dubbo 相關信息;
  4. 實現接口類;
  5. 服務提供者啟動類編寫

項目結構:

dubbo-provider 項目結構

1. dubbo-provider 項目創建

創建一個 SpringBoot 項目,注意勾選上 web 模塊。

注意勾選上 web 模塊

2. pom 文件引入相關依賴

需要引入 dubbo 、zookeeper以及接口的相關依賴 jar 包。注意將本項目和 dubbo-interface 項目的 dependency 依賴的 groupId 和 artifactId 改成自己的。dubbo 整合spring boot 的 jar 包在這里找dubbo-spring-boot-starter。zookeeper 的 jar包在 Maven 倉庫 搜索 zkclient 即可找到。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.fengx</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-provider</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <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>
        </dependency>
        <dependency>
            <groupId>com.fengx</groupId>
            <artifactId>dubbo-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--引入dubbo的依賴-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!-- 引入zookeeper的依賴 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3. 在 application.properties 配置文件中配置 dubbo 相關信息

配置很簡單,這主要得益於 springboot 整合 dubbo 專屬的@EnableDubboConfiguration 注解提供的 Dubbo 自動配置。

# 配置端口
server.port=8333

spring.dubbo.application.name=dubbo-provider
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181

4. 實現接口

注意: @Service 注解使用的時 Dubbo 提供的而不是 Spring 提供的。另外,加了Dubbo 提供的 @Service 注解之后還需要加入

package com.fengx.dubboprovider.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.fengx.service.HelloService;
import org.springframework.stereotype.Component;

/**
 * @author: Fengx
 * @date: 2021-07-21
 * @description: 服務接口實現
 **/
@Component
@Service
public class HelloServiceImpl implements HelloService {

    @Override
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

5. 服務提供者啟動類編寫

注意:不要忘記加上 @EnableDubboConfiguration 注解開啟Dubbo 的自動配置。

package com.fengx.dubboprovider;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 服務提供者
 */
@SpringBootApplication
// 開啟dubbo的自動配置
@EnableDubboConfiguration
public class DubboProviderApplication {
    
    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }
}

四:實現服務消費者 dubbo-consumer

主要分為下面幾步:

  1. 創建 springboot 項目;
  2. 加入 dubbo 、zookeeper以及接口的相關依賴 jar 包;
  3. 在 application.properties 配置文件中配置 dubbo 相關信息;
  4. 編寫測試類;
  5. 服務消費者啟動類編寫
  6. 測試效果

項目結構:

dubbo-consumer 項目結構

1. dubbo-consumer 項目創建

創建一個 SpringBoot 項目,注意勾選上 web 模塊。

注意勾選上 web 模塊

2. pom 文件引入相關依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.fengx</groupId>
    <artifactId>dubbo-consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dubbo-consumer</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <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>
        </dependency>
        <!--引入接口項目jar包-->
        <dependency>
            <groupId>com.fengx</groupId>
            <artifactId>dubbo-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--引入dubbo的依賴-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!-- 引入zookeeper的依賴 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

3. 在 application.properties 配置文件中配置 dubbo 相關信息

配置很簡單,這主要得益於 springboot 整合 dubbo 專屬的@EnableDubboConfiguration 注解提供的 Dubbo 自動配置。

# 配置端口
server.port=8330

spring.dubbo.application.name=dubbo-consumer
spring.dubbo.application.registry=zookeeper://127.0.0.1:2181

4. 編寫一個簡單 Controller 調用遠程服務

package com.fengx.dubboconsumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.fengx.service.HelloService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author: Fengx
 * @date: 2021-07-21
 * @description: 調用遠程服務
 **/
@RestController
public class HelloController {

    @Reference
    private HelloService helloService;

    @RequestMapping("/hello")
    public String hello() {
        String hello = helloService.sayHello("world");
        System.out.println(helloService.sayHello("fengx"));
        return hello;
    }
}

5. 服務消費者啟動類編寫

package com.fengx.dubboconsumer;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubboConfiguration
public class DubboConsumerApplication {

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

6. 測試效果

瀏覽器訪問 http://localhost:8330/hello 頁面返回 Hello world,控制台輸出 Hello fengx,和預期一致,使用SpringBoot+Dubbo 搭建第一個簡單的分布式服務實驗成功!

參考:https://github.com/CodingDocs/springboot-guide/blob/master/docs/advanced/springboot-dubbo.md


免責聲明!

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



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