美文网首页
RPC 调用工具包

RPC 调用工具包

作者: wyh1791 | 来源:发表于2019-10-11 20:37 被阅读0次

描述: 对RPC调用的结果, 参数进行封装
包含两种类型的封装

  1. 无分页的请求调用
  2. 分页请求调用

maven:

            <dependency>
                <groupId>com.clubfactory.center</groupId>
                <artifactId>rpc-util</artifactId>
                <version>1.0.7</version>
            </dependency>

代码展示

  • 返回结果封装
    包含4种结果类型, 每一种返回都进行了友好封装, 同时调用方能很方便的判断是否成功
    1.成功SUCCESS
    2.校验失败ERROR_VALIDATE
    3.业务逻辑错误ERROR_BIZ
    4.系统错误ERROR_SYS
@Accessors(chain = true)
public class Result<T> implements Serializable {
    /**
     * 成功
     **/
    private static final int SUCCESS = 1001;
    /**
     * 验证类异常
     **/
    private static final int ERROR_VALIDATE = 2002;
    /**
     * 业务类异常
     **/
    private static final int ERROR_BIZ = 3003;
    /**
     * 系统类异常
     **/
    private static final int ERROR_SYS = 4004;

    @Getter
    @Setter
    private Integer code;
    @Getter
    @Setter
    private String msg;
    @Getter
    @Setter
    private T data;

    /**
     * 返回成功,无返回值
     *
     * @param <T>
     * @return
     */
    public static <T> Result<T> success() {
        final Result<T> result = new Result<T>();
        result.setCode(SUCCESS);
        result.setMsg(null);
        result.setData(null);
        return result;
    }

    /**
     * 返回成功,又返回值
     *
     * @param value
     * @param <T>
     * @return
     */
    public static <T> Result<T> success(T value) {
        final Result<T> result = new Result<T>();
        result.setCode(SUCCESS);
        result.setData(value);
        result.setMsg(null);
        return result;
    }

    /**
     * 验证类异常
     *
     * @param errorMsg
     * @param <T>
     * @return
     */
    public static <T> Result<T> errorValidate(String errorMsg) {
        final Result<T> result = new Result<T>();
        result.setMsg(errorMsg);
        result.setData(null);
        result.setCode(ERROR_VALIDATE);
        return result;
    }

    /**
     * 业务类异常
     *
     * @param errorMsg
     * @param <T>
     * @return
     */
    public static <T> Result<T> errorBiz(String errorMsg) {
        final Result<T> result = new Result<T>();
        result.setMsg(errorMsg);
        result.setData(null);
        result.setCode(ERROR_BIZ);
        return result;
    }

    /**
     * 系统类异常
     *
     * @param errorMsg
     * @param <T>
     * @return
     */
    public static <T> Result<T> errorSystem(String errorMsg) {
        final Result<T> result = new Result<T>();
        result.setMsg(errorMsg);
        result.setData(null);
        result.setCode(ERROR_SYS);
        return result;
    }


    /**
     * 其他类异常(用于客户端做特殊校验)
     * 返回编码为5005-6006之间
     *
     * @param code
     * @param msg
     * @return
     */
    public static <T> Result<T> errorOther(Integer code, String msg) {
        final Result<T> result = new Result<T>();
        result.setMsg(msg);
        result.setData(null);
        result.setCode(code == null ? 5005 : code);
        return result;
    }


    public Result() {
    }


    /**
     * 判断返回对象是成功还是失败
     *
     * @return
     */
    public boolean isSuccess() {
        if (this.code != null && this.code == SUCCESS) {
            return true;
        }
        return false;
    }

}
  • 分页结果封装, 创建接口进行了友好封装, 使用很便捷
    分页数据相关信息封装, 包含:
    1.当前页pageNum
    2.每页的数量pageSize
    3.总页数pageSize
    4.当前页数据list

@Accessors(chain = true)
public class PageDetailForm<T> implements Serializable {

    /** 当前页 */
    @Setter
    private int pageNum;
    /** 每页的数量 */
    @Getter
    @Setter
    private int pageSize = 10;
    /** 总记录数 */
    @Getter
    @Setter
    private int total;
    /** 结果集 */
    @Setter
    private List<T> list;
    /** 是否有下一页**/
    @Setter
    private Boolean isEnd;

    public int getPageNum() {
        if(pageNum < 1) {
            pageNum = 1;
        }
        return pageNum;
    }

    public Boolean getIsEnd() {
        return ((pageNum -1) * pageSize + getList().size()) >= total;
    }

    public List<T> getList() {
        if(list == null || list.size() == 0) {
            return new ArrayList<>();
        }
        return list;
    }

    public PageDetailForm() {
    }

    public PageDetailForm(PageForm pageForm) {
        this.pageNum = pageForm.getPageNum();
        this.pageSize = pageForm.getPageSize();
    }


    public PageDetailForm(int pageNum, int pageSize, int total, List<T> list) {
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        this.total = total;
        this.list = list;
    }

    public PageDetailForm(int pageNum, int pageSize) {
        this.pageNum = pageNum;
        this.pageSize = pageSize;
        total = 0;
        list = new ArrayList<>();
    }
}
  • 分页参数进行封装
    分页参数标准化, 提供了mysql数据查询层getPageIndex封装, 简化mysql分页中start, limit的处理
@Accessors(chain = true)
public abstract class PageForm implements Serializable {
    @Getter
    @Setter
    private Integer pageNum=1;
    @Getter
    @Setter
    private Integer pageSize=10;
    @Setter
    private Integer pageIndex = 0;

    public Integer getPageIndex() {
        return (pageNum -1) * pageSize;
    }
}

使用示例
1.无分页: 更新数据示例
调用方通过返回值result的, result.isSuccess()判断调用是否成功
如果调用失败, 通过result.getMsg()获取失败信息

    @Override
    public Result<Boolean> update(ExcelProcessTaskDTO dto) {
        if(BaseUtil.isEmpty(dto)){
            return Result.errorValidate(PARAM_EMPTY);
        }

        return Result.success(excelProcessTaskBiz.update(dto));
    }

2.分页查询
a. 定义分页查询参数

@Data
@Accessors(chain = true)
public class ExcelProcessTaskParamDTO extends PageForm{

    /**
     * 卖家id
     */
    private Integer sellerId;
}

b. 定义返回数据类型

@Data
@Accessors(chain = true)
public class ExcelProcessTaskDTO extends BaseDTO {

    /**
     *
     */
    private Integer id;
    /**
     *
     */
    private Date createTime;
    /**
     *
     */
    private Date updateTime;
    /**
     *
     */
    private String batchId;
    /**
     *
     */
    private Integer sellerId;
    /**
     *  seller名称
     */
    private String sellerName;
    /**
     *  seller国家
     */
    private String country;
    /**
     * 上传文件名称
     */
    private String uploadUrl;
    /**
     * 错误数量
     */
    private Integer errorCount;
    /**
     * 上传失败的行数
     */
    private Integer failedLines;
    /**
     * 上传成功的行数
     */
    private Integer successLines;
    /**
     * 文件上传任务状态
     */
    private Integer taskStatus;
    /**
     * 上传报告名称
     */
    private String reportUrl;
}

c. 进行分页查询并返回数据

    @Override
    public Result<PageDetailForm<ExcelProcessTaskDTO>> listTask(ExcelProcessTaskParamDTO param) {
        //参数校验
        if(BaseUtil.isEmpty(param)){
            return Result.errorValidate(PARAM_EMPTY);
        }
        if (BaseUtil.isNotPositive(param.getSellerId())) {
            return Result.errorValidate("SellId不能为空!");
        }

        //得到数据
        List<ExcelProcessTaskDTO> dtos = excelProcessTaskBiz.listTask(param.getSellerId(), param.getPageIndex(), param.getPageSize());

        return Result.success(new PageDetailForm(param).setList(dtos));
    }

相关文章

  • RPC 调用工具包

    描述: 对RPC调用的结果, 参数进行封装包含两种类型的封装 无分页的请求调用 分页请求调用 maven: 代码展...

  • WHC RPC业务解析

    WormHole RPC的处理流程 RPC 的业务整理 RPC的调用流程 燃烧BCH,获取基础货币RPC调用流程 ...

  • JavaGuide知识点整理——RPC原理

    何为RPC? RPC即远程过程调用,通过名字我们就能看出RPC关注的是远程调用而非本地调用。为什么要RPC?因为两...

  • 基于netty手写RPC框架

    代码目录结构 rpc-common存放公共类 rpc-interface为rpc调用方需要调用的接口 rpc-re...

  • rpc学习

    什么是RPC RPC:Remote Produre Call-远程过程调用,像调用本地方法一样调用远程方法 RPC...

  • JAVA常用的RPC框架

    RPC(Remote Process Call),远程过程调用。RPC将本地调用转化为远程调用(非本地调用,个人理...

  • RPC框架原理

    RPC调用是面向服务架构场景下进行服务间调用的常用组件,一个完整的RPC调用的流程如图1所示: 为了方便RPC调用...

  • RPC

    RPC基本原理 什么是RPC RPC是远程过程调用(Remote Procedure Call)的缩写。 像调用本...

  • RMI和RPC

    一、RPC 远程过程调用 RPC(Remote Procedure Call Protocol)远程过程调用协议,...

  • 一文告诉你 Java RMI 和 RPC 的区别!

    RPC 远程过程调用 RPC(Remote Procedure Call Protocol)远程过程调用协议,通过...

网友评论

      本文标题:RPC 调用工具包

      本文链接:https://www.haomeiwen.com/subject/yhwxmctx.html