use of io.spring.cloud.samples.brewery.common.model.Ingredient in project brewery by spring-cloud-samples.
the class IngredientsFetchController method ingredients.
/**
* [SLEUTH] WebAsyncTask
*/
@RequestMapping(value = "/{ingredient}", method = RequestMethod.POST)
public WebAsyncTask<Ingredient> ingredients(@PathVariable("ingredient") IngredientType ingredientType, @RequestHeader("PROCESS-ID") String processId, @RequestHeader(TestConfigurationHolder.TEST_COMMUNICATION_TYPE_HEADER_NAME) String testCommunicationType) {
log.info("Received a request to [/{}] with process id [{}] and communication type [{}]", ingredientType, processId, testCommunicationType);
return new WebAsyncTask<>(() -> {
Span span = tracer.nextSpan().name("inside_ingredients").start();
try (Tracer.SpanInScope ws = tracer.withSpanInScope(span)) {
Ingredient ingredient = new Ingredient(ingredientType, stubbedIngredientsProperties.getReturnedIngredientsQuantity());
log.info("Returning [{}] as fetched ingredient from an external service", ingredient);
return ingredient;
} finally {
span.finish();
}
});
}
use of io.spring.cloud.samples.brewery.common.model.Ingredient in project brewery by spring-cloud-samples.
the class IngredientsAggregator method fetchIngredients.
// TODO: Consider simplifying the case by removing the DB (always matches threshold)
public Ingredients fetchIngredients(Order order, String processId, TestConfigurationHolder testConfigurationHolder) throws Exception {
TestConfigurationHolder.TEST_CONFIG.set(testConfigurationHolder);
log.info("Fetching ingredients for order [{}] , processId [{}]", order, processId);
/**
* [SLEUTH] ParallelStreams won't work out of the box
* - example of a completable future with our TraceableExecutorService
* - makes little business sense here but that's just an example
*/
CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> {
TestConfigurationHolder.TEST_CONFIG.set(testConfigurationHolder);
ingredientsCollector.collectIngredients(order, processId).stream().filter(ingredient -> ingredient != null).forEach((Ingredient ingredient) -> {
log.info("Adding an ingredient [{}] for order [{}] , processId [{}]", ingredient);
ingredientWarehouse.addIngredient(ingredient);
});
return null;
}, new TraceableExecutorService(this.beanFactory, Executors.newFixedThreadPool(5), "fetchIngredients"));
// block to perform the request (as I said the example is stupid)
completableFuture.get();
eventGateway.emitEvent(Event.builder().eventType(EventType.INGREDIENTS_ORDERED).processId(processId).build());
Ingredients ingredients = ingredientWarehouse.getCurrentState();
return maturingUpdater.updateIfLimitReached(ingredients, processId);
}
Aggregations