Dubbo + Springboot 搭建简单项目

  • 管理控制台
  • 服务提供者
  • 服务消费者

 

在搭建 Dubbo 项目前需安装并部署注册中心。推荐使用 Zookeeper 作为注册中心。Zookeeeper 的安装及部署方法请参考:
Zookeeper的安装与部署
windows下zookeeper安装并发布成windows服务

 

管理控制台


方法1:

使用如下命令从 Apache Dubbo 官方 git 仓库中下载管理控制台项目(需安装 git):

git clone https://github.com/apache/dubbo-admin.git

采用前后端分离的方式,运行 dubbo-admin 项目:

后端:

将控制台定位到 dubbo-admin-server 目录下,运行如下命令:

mvn clean package 
cd target
java -jar dubbo-admin-server-0.1.jar

控制台显示 Completed initialization in x ms 表示启动成功。
关闭控制台窗口此进程自动关闭。

出现问题:

  1. 在打包过程中,提示 curator-test-version 依赖包版本过高,在父模块的 pom.xml 文件中,把 curator-test-version 从 4.1.0 修改为 2.4.2,但仍然有错。之后删除 dubbo-admin-server\src 中的 test 文件夹,提示打包成功。
  2. 后端项目启动时端口号若被占用,或者 Zookeeper 安装时使用了自定义的配置,可在 dubbo-admin\dubbo-admin-server\src\main\resources 目录下的 application.properties 文件中指定端口号或修改配置项。

前端

将控制台定位到 dubbo-admin-ui 目录下,运行如下命令:

npm install 
npm run dev

控制台显示 Compiled successfully in x ms
Your application is running here: http://localhost:port
表示前端运行成功。

前端项目启动时端口号若被占用,可在 dubbo-admin\dubbo-admin-ui\config\index.js 目录下的 index.js 文件中指定空闲端口号。

在浏览器中输入地址:http://localhost:8081

在这里插入图片描述
方法2:

使用如下命令从 git 仓库中下载老版本管理控制台:

git clone https://github.com/Augustvic/incubator-dubbo-ops.git

用 IDEA 编辑器打开并运行该项目。

在浏览器中输入地址:http://localhost:7001,用户名和密码均为 root。

在这里插入图片描述
 

服务提供者


推荐使用 IDEA 编辑器编写代码,推荐使用 maven 进行项目构建。

创建 Springboot 项目,命名为“dubboprovider”,作为服务提供者项目。创建子模块“SystemFacade”用于提供服务接口,创建子模块“SystemService”用于提供服务实现。
项目目录结构如下:
在这里插入图片描述

在父模块的 pom.xml 文件中指定项目父框架为 spring-boot-starter-parent:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/>
    </parent>

添加 spring-boot-starter-web、dubbo-spring-boot-starter、curator-framework、zookeeper 依赖:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <curator-framework.version>4.0.1</curator-framework.version>
        <zookeeper.version>3.5.5</zookeeper.version>
        <dubbo.starter.version>0.2.0</dubbo.starter.version>
    </properties>


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

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.starter.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${curator-framework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>
    </dependencies>

在子模块 SystemFacade 中创建 com.dubbo.test.service 包,定义提供者和消费者共同的接口 IUserService 接口,在接口中定义两个函数 sayHello、addInteger,分别用于打印字符串和计算整数之和:

public interface IUserService {
    String sayHello(String name);
    String addInteger(String s);
}

在子模块 SystemService 的 pom.xml 文件中引入模块 SystemFacade 的依赖:

    <dependencies>
        <dependency>
            <groupId>com.dubbo</groupId>
            <artifactId>SystemFacade</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

在 resources 资源文件夹下创建配置文件 application.yml:

# 指定进程端口号
server:
  port: 9083

spring:
  # 进程名
  application:
    name: august-dubbo-provider
dubbo:
  # 服务提供者名字
  application:
    name: august-dubbo-provider
  #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
  protocol:
    name: dubbo
    port: 20880
  # 注册中心配置,用于配置连接注册中心相关信息,由于注册中心在本地,所以 IP 地址为 localhost
  registry:
    address: zookeeper://localhost:2181
  #服务暴露与发现消费所在的package
  scan:
    base-packages: com.dubbo.test
  provider:
    timeout: 1000

创建 com.dubbo.test.service 包,该包中创建启动类 ProviderApplication:

@EnableDubbo
@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

继续创建 com.dubbo.test.service.impl 包,在该包中创建服务的提供者,即接口类 IUserService 的实现 UserServiceImpl:

@Component
@Service(version = "1.0.0")
public class UserServiceImpl implements IUserService {

    @Override
    public String sayHello(String name) {
        return name + " login in.";
    }

    @Override
    public String addInteger(String s) {
        if (s == null || s.length() < 3)
            return "Format Error!";
        int index = 0;
        while (index < s.length()) {
            if (s.charAt(index) == '+')
                break;
            index++;
        }
        int a = Integer.valueOf(s.substring(0, index));
        int b = Integer.valueOf(s.substring(index + 1));
        return String.valueOf(a + b);
    }
}

注意:@Service 来自于 com.alibaba.dubbo.config.annotation.Service,且必须指定版本号。

ProviderApplication 启动类必须在 UserServiceImp.java 所在包的上层包里面。

运行该 Springboot 进程,在管理控制台上查看服务提供者信息:
在这里插入图片描述

 

服务消费者


创建 Springboot 项目,命名为“dubboconsumer”,作为服务消费者项目。创建子模块“SystemFacade”用于定义共同的接口,创建子模块“SystemApi”用于消费服务。
项目目录结构如下:
在这里插入图片描述

在父模块的 pom.xml 文件中指定项目父框架为 spring-boot-starter-parent:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.4.RELEASE</version>
        <relativePath/>
    </parent>

添加 spring-boot-starter-web、dubbo-spring-boot-starter、curator-framework、zookeeper 依赖:

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <curator-framework.version>4.0.1</curator-framework.version>
        <zookeeper.version>3.5.5</zookeeper.version>
        <dubbo.starter.version>0.2.0</dubbo.starter.version>
    </properties>


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

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.starter.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${curator-framework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>
    </dependencies>

同样在子模块 SystemFacade 中创建 com.dubbo.test.service 包,定义提供者和消费者共同的接口 IUserService 接口,接口和服务提供者完全一样:

public interface IUserService {
    String sayHello(String name);
    String addInteger(String s);
}

在子模块 SystemApi 的 pom.xml 文件中引入模块 SystemFacade 的依赖:

    <dependencies>
        <dependency>
            <groupId>com.august</groupId>
            <artifactId>SystemFacade</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

在该子模块 resources 资源文件夹下创建配置文件 application.yml:

# 指定进程端口号
server:
  port: 9084

spring:
  # 进程名
  application:
    name: august-dubbo-consumer

dubbo:
  # 服务消费者名字
  application:
    name: august-dubbo-consumer
  #协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
  protocol:
    name: dubbo
    port: 20880
  # 注册中心配置,用于配置连接注册中心相关信息,由于注册中心在本地,所以 IP 地址为 localhost
  registry:
    address: zookeeper://localhost:2181
  consumer:
    timeout: 5000

创建 com.dubbo.test 包,该包中创建启动类 ConsumerApplication:

@EnableDubbo
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

继续创建 com.dubbo.test.controller 包,在该包中创建服务的消费者,UserController:

@RestController
public class UserController {

    @Reference(version = "1.0.0")
    private IUserService userService;

    @RequestMapping("/sayHello/{name}")
    public String sayHello(@PathVariable("name") String name) {
        return userService.sayHello(name);
    }

    @RequestMapping("/addInteger/{format}")
    public String addInteger(@PathVariable("format") String format) {
        return userService.addInteger(format);
    }
}

运行该 Springboot 进程,在管理控制台上查看服务消费者信息:
在这里插入图片描述

打开浏览器输入:http://localhost:9084/sayHello/August,测试方法 sayHello。浏览器显示如下,说明消费者成功调用服务:
在这里插入图片描述

在浏览器地址栏输入:http://localhost:9084/addInteger/5+6,测试方法 addInteger。浏览器显示如下,说明消费者成功调用服务:
在这里插入图片描述

 

参考


Apache Dubbo 官网
Zookeeper的安装与部署
windows下zookeeper安装并发布成windows服务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值