59. 命名范围

选择一个 Span 名称不是一件容易的事。Span 名称应描述一个操作名称。该名称应为低基数,因此不应包含标识符。

由于正在进行很多检测,因此一些 Span 名称是人为的:

  • 由方法名称为controllerMethodName的控制器收到controller-method-name

  • async用于使用包装的CallableRunnable接口完成的异步操作。

  • @ScheduledComments 的方法返回类的简单名称。

幸运的是,对于异步处理,您可以提供显式命名。

59.1 @SpanName 注解

您可以使用@SpanNameComments 来明确命名范围,如以下示例所示:

@SpanName("calculateTax")
class TaxCountingRunnable implements Runnable {

	@Override
	public void run() {
		// perform logic
	}

}

在这种情况下,按以下方式处理时,Span 被命名为calculateTax

Runnable runnable = new TraceRunnable(this.tracing, spanNamer,
		new TaxCountingRunnable());
Future<?> future = executorService.submit(runnable);
// ... some additional logic ...
future.get();

59.2 toString()方法

很难为RunnableCallable创建单独的类。通常,创建一个匿名类的实例。您不能 Comments 此类。为了克服该限制,如果不存在@SpanName注解,我们将检查该类是否具有toString()方法的自定义实现。

运行这样的代码将导致创建一个名为calculateTax的 Span,如以下示例所示:

Runnable runnable = new TraceRunnable(this.tracing, spanNamer, new Runnable() {
	@Override
	public void run() {
		// perform logic
	}

	@Override
	public String toString() {
		return "calculateTax";
	}
});
Future<?> future = executorService.submit(runnable);
// ... some additional logic ...
future.get();