springboot集成dubbo注解版

https://mengyf.com/2018/10/04/springboot-dubbo-demo.html
发表于 2018-10-04 更新于 2019-10-16

工作中用springboot搭建项目,用dubbo做远程调用。springboot提倡注解配置和java配置,本文是基于dubbo最新版本2.6.3,使用注解方式的示例。
本文假定你已经有springboot和dubbo的使用经验。

dubbo简介

dubbo是阿里巴巴开源的分布式服务框架,一般使用dubbo的RPC调用。但2016年停止维护,现在使用的2.8.4版本其实是当当维护的dubbox。2017年8月阿里又重启维护dubbo,并从2.5.7版本开始支持注解配置。

准备

此示例使用gradle构建,关于gradle的安装配置,请参考官方文档
zookeeper作为dubbo服务发现的基础组件,关于zookeeper的安装启动,请参考官方文档
项目结构如下

springboot-dubbo
├─settings.gradle
├─build.gradle
├─springboot-dubbo-api
│  │─build.gradle
│  └─src
│      └─main
│          └─java
│              └─org
│                  └─aaron
│                      └─springboot
│                          └─dubbo
│                              └─api
│                                  DemoService.java
├─springboot-dubbo-consumer
│  │─build.gradle
│  └─src
│      └─main
│          ├─java
│          │  └─org
│          │      └─aaron
│          │          └─springboot
│          │              └─dubbo
│          │                  └─consumer
│          │                      DemoController.java
│          │                      DubboConfiguration.java
│          │                      DubboConsumerApplication.java
│          │                          
│          └─resources
│               application.yml
└─springboot-dubbo-provider
    │─build.gradle
    └─src
        └─main
            ├─java
            │  └─org
            │      └─aaron
            │          └─springboot
            │              └─dubbo
            │                  └─provider
            │                      DemoServiceImpl.java
            │                      DubboConfiguration.java
            │                      DubboProviderApplication.java
            │                          
            └─resources
                application.yml

引入外部依赖

compile('com.alibaba:dubbo:2.6.3')
compile('org.apache.zookeeper:zookeeper:3.4.9')
compile('org.apache.curator:curator-framework:4.0.0')
compile('org.springframework.boot:spring-boot-starter-web')

配置

1.生产者dubbo配置

@Configuration
public class DubboConfiguration {

    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("zookeeper://127.0.0.1:2181");
        registryConfig.setClient("curator");
        return registryConfig;
    }

    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("sprintboot-dubbo-provider");
        return applicationConfig;
    }

    @Bean
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setPort(12021);
        protocolConfig.setName("dubbo");
        return protocolConfig;
    }
}

2.消费者dubbo配置

@Configuration
public class DubboConfiguration {

    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("zookeeper://127.0.0.1:2181");
        registryConfig.setClient("curator");
        return registryConfig;
    }

    @Bean
    public ApplicationConfig applicationConfig() {
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setName("sprintboot-dubbo-consumber");
        return applicationConfig;
    }

    @Bean
    public ConsumerConfig consumerConfig() {
        ConsumerConfig consumerConfig = new ConsumerConfig();
        consumerConfig.setTimeout(3000);
        return consumerConfig;
    }
}

3.定义接口

public interface DemoService {
    String sayHello();
}

4.生产者实现接口

import com.alibaba.dubbo.config.annotation.Service;

@Component
@Service(interfaceClass = DemoService.class, version = "1.0")
public class DemoServiceImpl implements DemoService {

    @Override
    public String sayHello() {
        return "Hello Springboot Dubbo";
    }
}

5.消费者调用接口

import com.alibaba.dubbo.config.annotation.Reference;

@RestController
public class DemoController {

    @Reference(interfaceClass = DemoService.class, version = "1.0")
    private DemoService demoService;

    @RequestMapping("/hello")
    public String sayHello() {
        return demoService.sayHello();
    }
}

启动

  1. 本地启动zookeeper
  2. 依次启动springboot-dubbo-provider,springboot-dubbo-consumer
  3. 浏览器访问 localhost:8080/hello
  4. 看到返回’Hello Springboot Dubbo’ 即表示调用成功

其他

示例源码(Github)
Dubbo注解配置
Dubbo注解驱动

标签: dubbo

评论已关闭