我想跟踪单个操作的开始和结束。由于接收器每秒收到 100 个请求,我无法实现它。请帮忙
当第一个进程结束时,第二个进程进入并更改 UUID 值。
所以我无法跟踪单个消息/请求的开始和结束。
这不是一个 Web 应用程序,因此不能对 Trace 类使用“reqest”范围,我的应用程序是一个发布-订阅模型。这是一个示例应用程序。
public class MainClass {
@Bean
@Autowired
public Receiver getEventHubReceiver(Trace trace, SomeOtherClass classex) {
return new Receiver(trace, classex);
}
}
@Component
class Trace{
String traceid;
public void setTraceid(String traceid) {
this.traceid = traceid;
}
public void trace(String msg){
System.out.println(traceid+" : Tracing : "+msg);
}
}
class Receiver{
private final SomeOtherClass classex;
private final Trace trace;
Receiver(Trace trace, SomeOtherClass classex){
this.trace= trace;
this.classex = classex;
}
//This is a callback method invoked by server internally.
public void receiver(){
trace.setTraceid(UUID.randomUUID().toString());
trace.trace("reached Receiver..started");
classex.invoke(); //==> I don't want to pass the Trace object here, same object should be used by multiple classes.
trace.trace("reached Receiver..completed");
}
}
class SomeOtherClass{
@Autowired
private Trace trace; // ==> ISSUE -- Behaving as a single ton.
public void invoke(){
trace.trace("Reached SomeOtherClass - started");
someLongRunProcess(); // it take almost 3-5 seconds to complete this.
trace.trace("Reached SomeOtherClass - completed");
}
private void someLongRunProcess() {
//DB invoke option
}
}
最佳答案
您是否尝试过 Trace
组件的 prototype
作用域?原型(prototype)范围应该允许您为您处理的每个请求创建一个新的 bean。欲了解更多信息,请参阅this answer on prototype scope instantiation .
关于java - 跟踪 Pub-Sub 模型中的请求开始和结束 - 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56105738/