如何生成dubbo rpc接口文档

位流蝉翼
• 阅读 1972

在国内dubbo成为很多互联网公司高并发分布式场景下rpc框架的首选,dubbo从开源至今经历过蛮多的过程,从开源到中间的停止维护,经过三年的沉寂,2017年9月,阿里巴巴宣布重启dubbo项目。到2018年2月,阿里将dubbo捐献给Apache基金会,随后dubbo经过孵化后顺利成为apache的顶级项目。

当然本文的重点不是介绍dubbo的使用,而是介绍如何利用smart-doc工具来生成dubbo的rpc内部接口文档。smart-doc因为其基于注释和java接口定义自动推导的理念,开源以来受到国内很多开发者的喜爱。在开源之初,smart-doc仅仅支持restful api文档的生成,但是在发展的过程中,不断有开发者询问smart-doc能否支持dubbo rpc接口文档的生成。经过不断努力,在smart-doc 1.8.7版本中我们增加了dubbo rpc接口的支持,下面来看看真正的操作。

一、集成smart-doc

smart-doc本着使用简单的原则开发了maven插件和gradle,通过插件来降低smart-doc的集成难度和去除依赖侵入性。您可以根据自己使用的依赖构建管理工具来选择相关的插件,下面以使用smart-doc-maven-plugin插件集成smart-doc生成dubbo为例。当然集成smart-doc来生成dubbo rpc接口文档你有两种可选方式:

  • 使用smart-doc扫描dubbo api模块
  • 使用smart-doc扫描dubbo provider模块

下面来看下集成方式。

1.1 添加插件

在你的dubbo api或者或者是dubbo provider模块中添加smart-doc-maven-plugin。当然你只需要选中一种方式即可

<plugin>
    <groupId>com.github.shalousun</groupId>
    <artifactId>smart-doc-maven-plugin</artifactId>
    <version>[最新版本]</version>
    <configuration>
        <!--指定生成文档的使用的配置文件,配置文件放在自己的项目中-->
        <configFile>./src/main/resources/smart-doc.json</configFile>
        <!--指定项目名称-->
        <projectName>测试</projectName>
        <!--smart-doc实现自动分析依赖树加载第三方依赖的源码,如果一些框架依赖库加载不到导致报错,这时请使用excludes排除掉-->
        <excludes>
            <!--格式为:groupId:artifactId;参考如下-->
            <!--1.0.7版本开始你还可以用正则匹配排除,如:poi.* -->
            <exclude>com.alibaba:fastjson</exclude>
        </excludes>
        <!--自1.0.8版本开始,插件提供includes支持-->
        <!--smart-doc能自动分析依赖树加载所有依赖源码,原则上会影响文档构建效率,因此你可以使用includes来让插件加载你配置的组件-->
        <includes>
            <!--格式为:groupId:artifactId;参考如下-->
            <include>com.alibaba:fastjson</include>
        </includes>
    </configuration>
    <executions>
        <execution>
            <!--如果不需要在执行编译时启动smart-doc,则将phase注释掉-->
            <phase>compile</phase>
            <goals>
                <goal>html</goal>
            </goals>
        </execution>
    </executions>
</plugin>

添加smart-doc所需配置文件

在你的dubbo api或者或者是dubbo provider模块reources中添加smart-doc.json配置文件

{
  "isStrict": false, //是否开启严格模式
  "allInOne": true,  //是否将文档合并到一个文件中,一般推荐为true
  "outPath": "D://md2", //指定文档的输出路径
  "projectName": "smart-doc",//配置自己的项目名称
  "rpcApiDependencies":[{ // 项目开放的dubbo api接口模块依赖,配置后输出到文档方便使用者集成
      "artifactId":"SpringBoot2-Dubbo-Api",
      "groupId":"com.demo",
      "version":"1.0.0"
  }],
  "rpcConsumerConfig":"src/main/resources/consumer-example.conf"//文档中添加dubbo consumer集成配置,用于方便集成方可以快速集成
}

关于smart-doc如果你生成文档需要更详细的配置请常看官方项目wiki文档
官方wiki文档

rpcConsumerConfig:

如果下你想让dubbo consumer集成更加快速,你可以将集成配置示例consumer-example.conf中,Smart-doc会将该示例直接输出到文档中。

dubbo:
  registry:
    protocol: zookeeper
    address:  ${zookeeper.adrress}
    id: my-registry
  scan:
    base-packages: com.iflytek.demo.dubbo
  application:
    name: dubbo-consumer

dubbo接口扫描

上面提到了smart-doc支持单独去扫描dubbo api或者dubbo provider。在扫描原理是主要通过识别@dubbo注释tag(idea可以支持添加自定义注释tag提示可以参考smart-doc wiki文档介绍)或dubbo的 @service注解。

扫描dubbo api

dubbo api通常都是很简洁的dubbo接口定义,如果你需要让smart-doc扫描到dubbo接口,那么需要加上@dubbo注释tag。示例如下:

/**
 * 用户操作
 *
 * @author yu 2019/4/22.
 * @author zhangsan 2019/4/22.
 * @version 1.0.0
 * @dubbo
 */
public interface UserService {

    /**
     * 查询所有用户
     *
     * @return
     */
    List<User> listOfUser();

    /**
     * 根据用户id查询
     *
     * @param userId
     * @return
     */
    User getById(String userId);
}

扫描dubbo provider

如果想通过dubbo provider生成rpc接口文档的情况,你不需要加任何的其他注释tag,smart-doc自动扫描@service注解完成。

/**
 * @author yu 2019/4/22.
 */
@Service
public class UserServiceImpl implements UserService {

    private static Map<String,User> userMap = new HashMap<>();

    static {
        userMap.put("1",new User()
                .setUid(UUIDUtil.getUuid32())
                .setName("zhangsan")
                .setAddress("四川成都")
        );
    }
    
    /**
     * 获取用户
     * @param userId
     * @return
     */
    @Override
    public User getById(String userId) {
        return userMap.get(userId);
    }

    /**
     * 获取用户
     * @return
     */
    @Override
    public List<User> listOfUser() {
        return userMap.values().stream().collect(Collectors.toList());
    }
}

生成操作

直接通过maven命令运行插件的文档生成命令或者在idea中直接单击插件的可视化命令即可。
如何生成dubbo rpc接口文档

dubbo-api文档生成效果图

Add dependency

<dependency>
    <groupId>com.demo</groupId>
    <artifactId>SpringBoot2-Dubbo-Api</artifactId>
    <version>1.0.0</version>
</dependency>

<dependency>
    <groupId>com.demo</groupId>
    <artifactId>SpringBoot2-Dubbo-Api</artifactId>
    <version>1.0.0</version>
</dependency>

用户操作

URI: dubbo://localhost:20880/com.iflytek.demo.dubbo.api.interfaces.UserService

Service: com.iflytek.demo.dubbo.api.interfaces.UserService

Protocol: dubbo

Author: yu 2019/4/22., zhangsan 2019/4/22.

Version: 1.0.0

查询所有用户

Definition: List<User> listOfUser()

Description: 查询所有用户

Response-fields:

Field Type Description Since
uid String 用户id -
name String 用户名称 -
address String 地址 -

根据用户id查询

Definition: User getById(String userId)

Description: 根据用户id查询

Invoke-parameters:

Parameter Type Description Required Since
userId String 用户id true -

Response-fields:

Field Type Description Since
uid String 用户id -
name String 用户名称 -
address String 地址 -

使用总结

smart-doc对于dubbo rpc文档生成的支持比较晚,当然目前市面也没有比其他比较好的工具以及模板参考。dubbo rpc文档的这块还需要更多的用户提出issue和改进意见。当然如果你认同和喜欢smart-doc请前往项目给我们一些支持点点star。

码云地址

Github地址

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
springcloud知识点总结
一.SpringCloud面试题口述1.SpringCloud和DubboSpringCloud和Dubbo都是现在主流的微服务架构SpringCloud是Apache旗下的Spring体系下的微服务解决方案Dubbo是阿里系的分布式服务治理框架从技术维度上,其实SpringCloud远远的超过Dubbo,Dubbo本身只是实现
Wesley13 Wesley13
3年前
RPC接口测试(三) RPC接口测试
RPC接口测试接口测试主要分HTTP和RPC两类,RPC类型里面以Dubbo较为知名。互联网微服务架构,两种接口都需要做接口测试的,不管是业务测试还是回归测试;Dubbo:Java栈的互联网公司比如阿里、美团、58、滴滴、京东等等都是差不多的服务端架构,所以这些公司,两类接口测试也是必不可少的工作部分;Dubbo是一
Stella981 Stella981
3年前
Dubbo 云原生之路
【Dubbo云原生之路】系列开篇作者:刘军花名陆龟,Github账号Chickenlj,ApacheDubboPMC,项目核心开发,见证了Dubbo重启开源,到从Apache基金会毕业的整个过程。现任职阿里云云原生应用平台团队,参与服务框架、微服务相关工作,目前主要
Stella981 Stella981
3年前
Go 版本入 Dubbo 生态一周年:已和 Spring Cloud、gRPC 互通
本文作者:o\\\\0去年5月,阿里开源的高性能RPC框架Dubbo从ASF毕业并晋升顶级项目,同时,还宣布Go语言版本的Dubbogo正式加入Dubbo官方生态。经过一年的发展,Dubbogo在技术和社区运营方面都已经有了不错的成绩。Dubbogo是Dubbo的完整Go语言实现,在功能实现和技术路
Wesley13 Wesley13
3年前
Java微服务新生代之Nacos
前言从2017年底Java开发领域使用最广的RPC框架Dubbo开启重新更新维护之路开始,阿里巴巴为打造Dubbo微服务生态持续开源了Sentinel(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Falibaba%2FSenti
Wesley13 Wesley13
3年前
Dubbo学习总结(1)——Dubbo入门基础与实例讲解
Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000个服务提供3,000,000,000次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。一、Dubbo简介1.1、Dubbo是什么?
Stella981 Stella981
3年前
Linux安装RocketMQ
本文介绍Linux安装RocketMQ。1.RocketMQ简介RocketMQ是阿里巴巴中间件开发的分布式消息系统,曾经经历过很多阿里巴巴大型项目的实际检验。在去年已经正式捐献给Apache开源基金会,成为孵化项目。今年正式升级成为了apache的顶级项目。RocketMQ官网地址为:http://rocketm
Stella981 Stella981
3年前
Dubbo版本升级
一、背景早期内部使用的是当当网fork的Dubbox,由于现在Dubbo又开始重新维护,而且阿里将其捐献给了Apache,并成为了Apache的顶级项目。因此dubbo版本升级到2.7.1势在必行。二、版本升级从2.8.4升级到2.7.1具体可以参考:DubboSpringBoot(v2.7.1): ht
Stella981 Stella981
3年前
Dubbo源码解析之SPI(一):扩展类的加载过程
Dubbo是一款开源的、高性能且轻量级的JavaRPC框架,它提供了三大核心能力:面向接口的远程方法调用、智能容错和负载均衡,以及服务自动注册和发现。Dubbo最早是阿里公司内部的RPC框架,于2011年开源,之后迅速成为国内该类开源项目的佼佼者,2018年2月,通过投票正式成为Apache基金会孵化项目。目前宜信公司内部也有不少项目在使用Dub
Stella981 Stella981
3年前
Dubbo 常见错误及解决方法
Dubbo作为高性能RPC(RemoteProcedureCall)框架已经成为Apache的顶级项目,意味着在全球被数以千计的公司所采用来其实现其分布式架构的互联集成,尤其是在国内更受欢迎。下面根据我们自身遇到的问题,加上用户提供的一些反馈,来大致梳理下Dubbo的常见错误及解决方法。地址找不到:Noprovi
Stella981 Stella981
3年前
Linux下安装Dubbox
1.Dubbox简介  Dubbox是一个分布式服务框架,其前身是阿里巴巴开源项目Dubbo,被国内电商及互联网项目中使用,后期阿里巴巴停止了该项目的维护,当当网便在Dubbo基础上进行优化,并继续维护,为了与原有的Dubbo区分,故将其命名为Dubbox。Dubbox致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA