Skip to content
AI 文档索引 ↗

Java 基础 API ​

以下示例使用已初始化的 client。安装见Java 集成,发送方式见上报方式,事件定义见服务端事件与用户操作。

事件与画像操作 ​

生命周期事件 (trackLifecycle) ​

记录服务调用、批处理任务或事务的开始、完成与失败:

java
import com.trackbusiness.server.operations.ServerLifecycleOperation;
import com.trackbusiness.server.operations.ServerOperationOptions;
import com.trackbusiness.server.model.ServerIdentity;

long start = System.currentTimeMillis();
String txId = "tx_987654";
ServerOperationOptions options = ServerOperationOptions.builder(new ServerIdentity("user_1024", null)).build();

// 记录事务开始
client.trackLifecycle(ServerLifecycleOperation.builder(options,
    ServerLifecycleOperation.Kind.TRANSACTION, "payment-transaction",
    ServerLifecycleOperation.Phase.STARTED, txId).build());

try {
    doPaymentTransaction();
    // 记录事务成功(必须包含耗时 durationMs)
    client.trackLifecycle(ServerLifecycleOperation.builder(options,
        ServerLifecycleOperation.Kind.TRANSACTION, "payment-transaction",
        ServerLifecycleOperation.Phase.COMPLETED, txId)
        .durationMs(System.currentTimeMillis() - start).build());
} catch (Exception ex) {
    // 记录事务失败(传入低基数错误类型)
    client.trackLifecycle(ServerLifecycleOperation.builder(options,
        ServerLifecycleOperation.Kind.TRANSACTION, "payment-transaction",
        ServerLifecycleOperation.Phase.FAILED, txId)
        .durationMs(System.currentTimeMillis() - start)
        .errorType("BALANCE_INSUFFICIENT").build());
    throw ex;
}

用户画像操作 (profileSet / profileDelete) ​

画像方法提交的是操作事件;实际画像更新、并发原子性和删除范围取决于接收端实现。详见服务端操作语义。

java
import com.trackbusiness.server.model.ServerIdentity;
import java.util.HashMap;
import java.util.Map;

ServerIdentity user = new ServerIdentity("user_1024", null);

// 覆盖用户画像标签
Map<String, Object> profile = new HashMap<>();
profile.put("vip_level", 3);
profile.put("company_name", "Acme Corp");
client.profileSet(user, profile);

// 提交数值画像属性自增请求(如累计充值次数)
client.profileIncrement(user, java.util.Collections.<String, Object>singletonMap("total_recharges", 1));

// 提交用户画像删除请求
client.profileDelete(user);

公共与动态属性 ​

同名属性的优先级为:单次事件属性 > 动态属性 > 公共属性。

公共属性 (registerSuperProperties) ​

适用于多个事件共用的属性,例如服务版本和集群代号:

java
Map<String, Object> superProps = new HashMap<>();
superProps.put("cluster_id", "k8s-prod-shanghai-01");
client.registerSuperProperties(superProps);

动态属性(MDC / ThreadLocal) ​

构建 ServerClient 时设置 dynamicProperties(Supplier),在调用 track() 的线程读取 trace_id 等请求字段:

java
import org.slf4j.MDC;
import java.util.HashMap;
import java.util.Map;

ServerClient client = ServerClient.builder(endpoint, projectKey)
    // 注册动态属性提供器:在当前调用线程同步提取
    .dynamicProperties(() -> {
        Map<String, Object> dynamic = new HashMap<>();
        String traceId = MDC.get("traceId");
        if (traceId != null) {
            dynamic.put("trace_id", traceId);
        }
        return dynamic;
    })
    .build();