一个简单的dubbo样例

项目中用到了 dubbo 服务,于是业余时间了解下 dubbo,以及实现一个基于 springboot 的 demo

前言

dubbo 是一款由阿里巴巴开源,现已进入 Apache 开源孵化器的一个 RPC(Remote Procedure Call)框架。

它能做什么?

  • 提供高性能、透明化的远程服务调用方案,服务调用者使用服务可以像调用本地方法那样调用远端的服务。

特点:

  • 高性能:服务的远程调用以接口为粒度,调用者只需关注接口的功能,屏蔽底层的接口实现
  • 轻量级:采用 Spring 配置方式,没有任何 API 的侵入,所有功能通过注解或者配置文件即可实现

架构: 包括 5 个部分
暴露服务的服务提供方(Provider),调用远程服务的服务消费方(Consumer),服务注册与发现的注册中心(Registry),统计服务的调用次数和调用时间的监控中心(Monitor), 服务运行容器(Container)。

  • Container 启动运行 Provider
  • Provider 向 Registry 注册自己提供的服务,Consumer 向 Registry 订阅自己所需要的服务
  • Registry 向 Consumer 返回 Provider 的地址列表,Consumer 从地址列表中选择一个 Provider 进行调用
  • Monitor 统计 Provider,Consumer 的调用次数和调用时间
    dubbo 架构体系

代码实现

  • dubbo-demo 工程定义了三个模块,其中服务提供者 provider 和服务消费者 consumer 模块均引用 api 模块
    • api :定义服务的接口
    • provider:服务提供者,实现 api 模块定义的服务接口
    • consumer:服务消费者,调用 api 定义的接口,具体功能由 Provider 实现

基本 jar 包依赖,上面三个模块共同拥有下面依赖:

<dependencies>
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--zookeeper依赖 -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        <!-- Junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

服务接口定义 api,定义接口 getTime

import java.util.Date;

public interface HelloService {
    Date getTime();
}

服务提供者 Provider,定义接口的实现。其中 Service 注解是 com.alibaba.dubbo.config.annotation.Service

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

import java.util.Date;


@Service   // 注意引用的包 import com.alibaba.dubbo.config.annotation.Service;
@Component
public class HelloServiceImpl implements HelloService {

    public Date getTime() {
        return new Date();
    }
}

application.yml

server:
  port: 8101
spring:
  dubbo:
    application:
      id: dubbo-provider  #注册在注册中心的名称,唯一标识,请勿重复
      name: dubbo-provider
    registry:
      address: zookeeper://127.0.0.1:2181
    protocol:   #暴露服务方式
      id: dubbo
      name: dubbo
      port: 20885  #暴露服务端口 (默认是20880,修改端口,不同的服务提供者端口不能重复)
      status : server
    #scan: com.cn.provider.service  #调用dubbo组建扫描的项目路径

服务消费者 Consumer ,调用 Provider 中提供的服务

import com.alibaba.dubbo.config.annotation.Reference;
import com.cn.HelloService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.text.SimpleDateFormat;
import java.util.Date;

@Controller
public class HelloController {

    @Reference  // 引用服务
    private HelloService helloService;

    @RequestMapping("/get")
    @ResponseBody
    public String getName(){
        Date date = helloService.getTime();
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
    }

}

Consumer 配置文件 application.yml

#spring.application.name=dubbo-consumer
server:
  port: 8102
  servlet:
    context-path: /dubbo
#应用名称
spring:
  dubbo:
    application:
      name: dubbo-consumer
    #注册中心地址
    protocol:
      name: dubbo
    registry:
      address: zookeeper://127.0.0.1:2181   # 注册中心地址
    #调用dubbo组建扫描的项目路径
#    scan: com.cn.consumer.controller

运行: 先启动 Zookeeper,然后启动 Provider,最后启动 Consumer,地址栏输入 http://localhost:8102/dubbo/get 即可返回当前时间。

至此一个简单的基于 Springboot 的 dubbo 服务框架配置完成。有了这个基本的框架之后,一些常见的非核心业务如短信服务,发票服务等就可以抽取出来,作为独立的微服务提供远程调用。

dubbo 服务监控

dubbo 服务建立起来之后,有相应的可视化服务监控平台,包括以前用的版本 2.6.0 之后不再启用的 dubbo-admin 和现在官方文档推荐的 dubbo-ops
在这里插入图片描述
dubbo-admin 启用,部署方式 参考

总结

这里只是对 dubbo 基本的配置做一个总结,具体细节配置,还需要参照具体文档进行,先用起来,再研究是什么情况。

demo 代码

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值