我正在尝试不同的微服务跟踪方法(我主要使用RabbitMQ处理事件驱动的服务)。
我要测试的内容:
提供代码
@Autowired
Tracer tracer;
@NewSpan
@CaptureSpan
private URLConnection getUrlConnection(String url) throws IOException {
ScopedSpan sp = tracer.startScopedSpanWithParent("getUrlConnection", tracer.currentSpan().context());
LOGGER.info("COUOSQUDQSUD");
sp.finish();
return new URL(url).openConnection();
}
@StreamListener(Sink.INPUT)
@CaptureTransaction
public void transferToS3(FileEntry fileEntry) throws IOException {
MDC.put("document_id", fileEntry.getId());
LOGGER.info("Handling Transfer");
URLConnection fileUrlConnection = getUrlConnection(fileEntry.getUrl());
PutObjectResponse response = s3Client.putObject(PutObjectRequest.builder()
.bucket(fileEntry.getS3().getBucket())
.key(fileEntry.getFileName())
.build(), RequestBody.fromInputStream(
new BufferedInputStream(fileUrlConnection.getInputStream()),
fileUrlConnection.getContentLength()
)
);
fileEntry.getS3().setPushedAt(new Date().getTime());
fileEntry.getS3().setPath(response.getValueForField("key", String.class).toString());
LOGGER.info("Transfer done");
}
我的问题/评论/问题
@NewSpan
在Zipkin中未添加跨度,整个“ transferToS3”被视为一个跨度。我尝试了其他几个注释,但均未成功。要使用这个新跨度,我使用ScopedSpan sp = tracer.startScopedSpanWithParent("getUrlConnection", tracer.currentSpan().context());
和sp.finish()
。跨度在ZipKin中可见,但与仅放置@NewSpan
相比并没有真正的吸引力。 我想念什么吗?
Elasticsearch APM代理+ API似乎只需要添加@CaptureTransaction
和@CaptureSpan
即可正确处理此问题。我知道它不是完美的,因为它不能直接挂接到消费者电话上,也不能有效支持我的用例跟踪。
但这还需要添加代理。
谢谢:)。
答案 0 :(得分:0)
您正在从另一个方法中调用一个方法。 Spring正在围绕您的方法创建代理。如果您从同一个类的另一个方法中调用一个方法,则不会通过代理。将用新跨度注释的方法提取到单独的类中,它将很好地工作。