问题描述
当发件人发送帖子时,我需要通知多个订阅者。在这种情况下,“发件人发送帖子”是一个 HTTP 帖子并创建一个 trace
。
我的目标:查看我的日志时,我会知道“哪个订阅者是创建此日志通知的方法”。
我天真的想法:对于“通知订阅者 A”、“通知订阅者 B”等中的每一个,它们都是 span
的子树。如果我可以将 tag
分配给每个 span 子树,那么我就完成了。
但是,我不知道该怎么做。或者,还有其他方法可以实现我的目标吗?
谢谢!
解决方法
如果我理解您在此处尝试实现的目标,即 Sleuth 的默认行为,请查看跟踪跨度和父子跨度关系的 docs。
您唯一需要做的就是在每次通知订阅者时创建一个新的 Span。有多种方法可以做到这一点,请参阅文档(例如:tracer.withSpan
、@NewSpan
)。
这是一个虚构的例子:
@GetMapping("/something") // Sleuth has already created a span for your endpoint
public void something() {
subscribers.forEach(subscriber -> notify(subscriber,new Event("foo")));
}
@NewSpan // This does the trick
public void notify(Subscriber subscriber,Event event) {
subscriber.notify(event);
}
如果你想标记你的跨度,请查看我上面提供的文档的链接,它会告诉你如何附加标签。