Трассировка начала и конца запроса в модели Pub-Sub - проблема - PullRequest
0 голосов
/ 13 мая 2019

Я хочу проследить начало и конец одной операции. Поскольку получатель получает 100 запросов / секунд, я не могу его достичь. Пожалуйста, помогите

К моменту окончания первого процесса, второй процесс входит и изменяет значение UUID.

Так что я не могу отследить начало и конец одного сообщения / запроса.

Это не веб-приложение, поэтому я не могу использовать область 'reqest' для класса Trace, мое приложение представляет собой модель pub-sub. Вот пример приложения.

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
    }
}

1 Ответ

0 голосов
/ 16 мая 2019

Пробовали ли вы область действия prototype для компонента Trace? Область действия прототипа должна позволять создавать новый компонент для каждого обрабатываемого запроса. Для получения дополнительной информации см. этот ответ по созданию экземпляра области действия прототипа .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...