文章目录
  1. 1. 服务提供方
    1. 1.1. 引入dubbo依赖
    2. 1.2. 编写服务接口
    3. 1.3. 编写服务实现类
    4. 1.4. 启动类标注开启dubbo自动装配支持
    5. 1.5. 配置文件修改
  2. 2. 服务消费方
    1. 2.1. 引入依赖
    2. 2.2. 编写业务类,调用提供方服务
    3. 2.3. 启动类标注开启dubbo自动装配支持
    4. 2.4. 修改配置文件
    5. 2.5. 测试服务调用
  3. 3. 小结

本文主要讲解在springboot2.x中,整合官方版本的dubbo-spring-boot-starter实现RPC服务化框架的搭建。

服务提供方

首先讲解服务提供方的集成过程,我们在IDEA中通过spring-initializr建立一个springboot应用,使用springboot版本为2.1.2.RELEASE

引入dubbo依赖

在pom.xml中引入依赖,坐标如下

<!-- dubbo依赖开始 -->
<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>
<!-- dubbo依赖结束 -->

由于2.0.0版本的>dubbo-spring-boot-starter对应的dubbo版本为2.6.0,因此需要依赖zkclient,后续的高版本使用的zookeeper客户端为apache-curator。

编写服务接口

我们定义一个简单的服务接口用作测试,该接口需要被服务提供方和消费方同时引用,建议将接口及公共的model以及异常等打为一个公共的jar包,供服务提供方和消费方引用,

public interface HelloService {

    /**
    * @param message
    * @return
    */
    String sayHello(String message);
}

编写服务实现类

在服务提供方中编写实现类。HelloServiceImpl,实现HelloService接口,如下,因为主要描述的是整合过程,因此demo很简单,说明问题即可。

import com.alibaba.dubbo.config.annotation.Service;
import com.gaoyang.marketing.dev.prototype.dubbo.api.HelloService;
import org.springframework.stereotype.Component;

@Component
@Service(interfaceClass = HelloService.class)
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello(String message) {
        return "HELLO:" + message;
    }
}

发布一个dubbo服务就是这么简单,只需要将一个spring的bean标注 @Service ,注意选择 import com.alibaba.dubbo.config.annotation.Service

其中interfaceClass是要发布服务的接口.

启动类标注开启dubbo自动装配支持

在入口main方法上标注 @EnableDubboConfiguration 即可开启dubbo的自动装配支持。

配置文件修改

修改配置文件application.properties,将当前服务标记为一个dubbo服务端,同时添加zookeeper注册中心地址。

########################################################################
#
#     dubbo配置
#
#########################################################################
spring.dubbo.server=true
spring.dubbo.registry=zookeeper://127.0.0.1

此时,应用已经具备启动条件。只需要在IDEA中右键run即可启动服务,dubbo默认的服务暴露端口为8080

服务消费方

接着我们开发服务消费方,并对提供方的接口发起调用

引入依赖

同样先在pom.xml中引入依赖,和提供方保持一致即可,不再赘述

<!-- dubbo依赖开始 -->
<dependency>
    <groupId>com.alibaba.spring.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>com.101tec</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.10</version>
</dependency>
<!-- dubbo依赖结束 -->

编写业务类,调用提供方服务

我们写一个业务类,并在该类中调用提供方的服务。

@Component
public class Hello implements HelloService {

    /**
    *     @Reference
    *     如果添加interfaceClass = HelloService.class,则按照interfaceClass = HelloService.class
    *     对应的接口寻找
    *     如果不添加则按照注解的接口寻找服务
    */
    @Reference(interfaceClass = HelloService.class, check = false)
    private IHelloService iHelloService;

    @Override
    public String sayHello(String message) {
        return iHelloService.sayHello(message);
    }
}

看起来很简洁,只需要在消费者的业务类中通过 @Reference(interfaceClass = HelloService.class, check = false) 引用远程的dubbo服务,
便可以像调用本地服务一样调用远程的dubbo服务。最终会在本地生成一个服务的代理,该代理负责发起真正的服务调用。

启动类标注开启dubbo自动装配支持

这一步与服务提供方一致,在入口main方法上标注 @EnableDubboConfiguration 即可开启dubbo的自动装配支持。

修改配置文件

在服务消费方配置文件application.properties中配置注册中心地址。

########################################################################
#
#     dubbo配置
#
#########################################################################
spring.dubbo.registry=zookeeper://127.0.0.1

如果服务消费者同时也是提供者,则添加配置

spring.dubbo.server=true

测试服务调用

这里我们直接在main方法中调用远程服务,具体代码如下

ApplicationContext context = SpringApplication.run(Application.class, args);
Hello hello = context.getBean("hello", Hello.class);
String sayHello = hello.sayHello("SnoWalker");
System.out.println(sayHello);

注意服务端一定要启动。

在消费方服务的控制台可以看到输出如下字样,表明调用成功

HELLO:SnoWalker

小结

我们在本次实例中,实现了在springboot2.x中,整合官方版本的dubbo-spring-boot-starter实现RPC服务化框架的搭建,及验证。

笔者个人建议这种方式可以用在小而精的业务开发中,对于复杂的业务开发,还是建议通过传统的xml方式进行服务的定义与暴露,基于xml的方式要比注解方式更加的灵活。

文章目录
  1. 1. 服务提供方
    1. 1.1. 引入dubbo依赖
    2. 1.2. 编写服务接口
    3. 1.3. 编写服务实现类
    4. 1.4. 启动类标注开启dubbo自动装配支持
    5. 1.5. 配置文件修改
  2. 2. 服务消费方
    1. 2.1. 引入依赖
    2. 2.2. 编写业务类,调用提供方服务
    3. 2.3. 启动类标注开启dubbo自动装配支持
    4. 2.4. 修改配置文件
    5. 2.5. 测试服务调用
  3. 3. 小结
Fork me on GitHub