2017-04-22 3 views
1

J'ai un cas d'utilisation où j'ai 6 étapes effectuées dans une requête. L'entreprise demande que nous capturions des mesures sur le résultat de chaque étape du processus. Ils veulent que nous nous connections à un flux Kinesis. Architecturalement je regarde la meilleure solution. Nous avons des services basés sur java Je veux avoir un objet étendu de requête enrichi au fur et à mesure que la requête progresse, puis quand le point de terminaison se termine, nous ferions un appel de service à kinesis asynchrone en utilisant un pattern fire and forget. De cette façon, le rapport ne tient pas le fil principal.Guice Request Étendue pour le workflow de suivi de la requête

Je cherchais à utiliser la portée brute ThreadLocal ou guice. Quelqu'un at-il rencontré un problème similaire qu'ils ont résolu? Im penser à l'utilisation de composants de portée de demande de guice, ce qui sera très simplement le code. Je cherche juste quelques opinions. Merci!

Répondre

1

Je suppose que vous n'êtes pas dans un environnement de servlet car, alors, vous utiliserez simplement la portée de requête intégrée. Même alors, vous pouvez utiliser la portée de la demande de guice-servlet construire la portée vous-même.

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

Vous pouvez utiliser @RequestScoped et il sera le même objet sur toutes vos démarches. Vous pouvez, par exemple, utiliser un fournisseur pour y accéder.