竹简文档
Dubbo Triple

TripleRequest

TripleRequest 抽象类定义 Dubbo Triple RPC 请求的基础结构与校验规范

TripleRequest

TripleRequest 是 Dubbo Triple RPC 请求的抽象基类,定义了请求元数据结构与校验规范。所有 Triple 服务的请求参数均应继承该类,实现 validate()getSummary() 抽象方法。

类定义

TripleRequest.java
package com.xlf.utility.triple;

import lombok.experimental.SuperBuilder;
import java.io.Serializable;

// 抽象请求基类,使用 @SuperBuilder 支持子类继承 Builder
@SuperBuilder
public abstract class TripleRequest implements Serializable {
    private String ctx;
    private Long timestamp;
    private String source;
    private String version;

    public <T extends TripleRequest> T init(String source) { ... }

    public abstract boolean validate();
    public abstract String getSummary();
}

字段说明

字段

类型

抽象方法

validate()

校验请求参数的合法性。由 TripleRequestCheckAspect 在方法执行前自动调用。

TripleRequest.java
// 返回 true 表示校验通过,false 将触发 BusinessException
public abstract boolean validate();

getSummary()

返回请求的摘要描述,可用于日志记录与调试输出。

TripleRequest.java
public abstract String getSummary();

init() 方法

init() 方法用于初始化请求元数据,并返回当前实例(泛型 T extends TripleRequest)以支持链式调用。其行为与源码保持一致:

  • timestamp:设置为 System.currentTimeMillis()
  • ctx:读取 com.xlf.utility.mvc.holder.ContextHolder.getContextId()
  • source:设置为调用方传入值
  • version:固定设置为 "1.0.0"
InitExample.java
// 初始化请求元数据
UserQueryRequest request = UserQueryRequest.builder()
        .userId(10001L)
        .build()
        .init("order-service");

自定义请求类

继承 TripleRequest 并实现两个抽象方法:

UserQueryRequest.java
import com.xlf.utility.triple.TripleRequest;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.SuperBuilder;

@Data
@SuperBuilder
@EqualsAndHashCode(callSuper = true)
public class UserQueryRequest extends TripleRequest {
    private Long userId;
    private String username;

    // 实现参数校验逻辑
    @Override
    public boolean validate() {
        return userId != null && userId > 0;
    }

    @Override
    public String getSummary() {
        return "查询用户 [userId=" + userId + ", username=" + username + "]";
    }
}

完整使用示例

UserTripleService.java
import com.xlf.utility.ErrorCode;
import org.apache.dubbo.config.annotation.DubboService;

@DubboService
public class UserTripleServiceImpl implements UserTripleService {

    @DubboPersistentContext
    @TripleRequestCheck(message = "用户查询参数无效", errorCode = ErrorCode.PARAMETER_INVALID)
    @Override
    public TripleResponse<UserDTO> queryUser(UserQueryRequest request) {
        // 此处 request 已通过 validate() 校验
        // ctx 已由 DubboContextAspect 提取并注入上下文
        UserDTO user = userService.getById(request.getUserId());
        return TripleResult.success(user, "查询成功");
    }
}

下一步

On this page