使用X-Ray SDK for Java生成自定义子分段 - AWS X-Ray
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用X-Ray SDK for Java生成自定义子分段

子分段会扩展跟踪的分段并提供有关完成任务的详细信息,以便处理请求。每次您通过已分析的客户端进行调用时,X-Ray 开发工具包都将记录在子分段中生成的信息。您可以创建更多子分段以分组其他子分段、测量代码段的性能或记录注释和元数据。

要管理子分段,请使用 beginSubsegmentendSubsegment 方法。

例 GameModel.java - 自定义子分段

import com.amazonaws.xray.AWSXRay; ... public void saveGame(Game game) throws SessionNotFoundException { // wrap in subsegment Subsegment subsegment = AWSXRay.beginSubsegment("Save Game"); try { // check session String sessionId = game.getSession(); if (sessionModel.loadSession(sessionId) == null ) { throw new SessionNotFoundException(sessionId); } mapper.save(game); } catch (Exception e) { subsegment.addException(e); throw e; } finally { AWSXRay.endSubsegment(); } }

在此示例中,子分段中的代码使用会话模型上的方法从 DynamoDB 加载游戏会话,并使用AWS SDK for Java的 DynamoDB 映射器保存游戏。在子分段中包装此代码将调用控制台跟踪视图中 Save Game 子分段的 DynamoDB 子项。

如果子分段中的代码引发了检查异常,将其包装在 try 代码块中并在 finally 代码块中调用 AWSXRay.endSubsegment() 以确保始终结束子分段。如果子分段未结束,则父分段无法完成,不发送到 X-Ray。

对于不会引发检查异常的代码,可以将该代码作为 Lambda 函数传递给 AWSXRay.CreateSubsegment

例 子分段 Lambda 函数

import com.amazonaws.xray.AWSXRay; AWSXRay.createSubsegment("getMovies", (subsegment) -> { // function code });

当您在分段或者其他子分段中创建子分段时,X-Ray SDK for Java将为其生成 ID 并记录开始时间和结束时间。

例 包含元数据的子分段

"subsegments": [{ "id": "6f1605cd8a07cb70", "start_time": 1.480305974194E9, "end_time": 1.4803059742E9, "name": "Custom subsegment for UserModel.saveUser function", "metadata": { "debug": { "test": "Metadata string from UserModel.saveUser" } },