Guice Request Scope для отслеживания рабочего процесса запроса

У меня есть вариант использования, когда в одном запросе выполняется 6 шагов. Бизнес требует, чтобы мы собирали показатели того, каков был результат каждого шага в процессе. Они хотят, чтобы мы подключились к потоку Kinesis.

С архитектурной точки зрения я ищу лучшее решение. У нас есть службы на основе Java. Я хочу, чтобы объект области запроса обогащался по мере выполнения запроса, а затем, когда конечная точка завершает работу, мы делаем асинхронный вызов службы для kinesis, используя шаблон «запустил и забыл». Таким образом, отчетность не задерживает основной поток.

Я рассматривал возможность использования необработанной области ThreadLocal или guice. Кто-нибудь сталкивался с похожей проблемой, которую решили? Я думаю об использовании компонентов области запроса guice, которые значительно упростят код. Просто ищу мнения. Спасибо!


person Scoota P    schedule 22.04.2017    source источник


Ответы (1)


Я предполагаю, что вы не находитесь в среде сервлета, потому что тогда вы просто будете использовать встроенную область запроса. Даже в этом случае вы можете использовать область запроса из guice-servlet, создав область самостоятельно.

void processRequest() {
    RequestScoper scope = ServletScopes.scopeRequest(Collections.emptyMap());
    try ( RequestScoper.CloseableScope ignored = scope.open() ) {
        step1();
        step2();
        step3();
        step4();
        step5();
        step6();
    }
}

Вы можете использовать @RequestScoped, и это будет один и тот же объект на всех ваших шагах. Вы можете, например, использовать провайдера, чтобы получить к нему доступ.

person sargue    schedule 24.04.2017