обработка исключений двух разных вызовов API в завершаемом будущем - PullRequest
0 голосов
/ 10 мая 2019

у меня есть два метода, каждый из которых вызывает api rest, мне нужно вызвать их в одном потоке и выполнить асинхронно, поэтому я использовал completeblefuture и заключил оба вызова в один метод, моя проблема в том, что я не смог узнать исключение поднял из какой из них, это возможно? или до тех пор, пока они выполняются в одном потоке, я могу просто использовать метод completeExceptionally в completeblefuture и регистрировать исключение, так как есть ошибка при вызове первого или второго API, имеет ли это смысл или это не будет полезно для вызывающей стороны?

Вот симуляция этого сценария

// first api
public Codes findCodes(String codeID) {
        Codes result = null;
        try {
            result = restTemplate.getForObject("localhost:8080/api/codes?id=" + codeID, Codes.class);

        } catch (Exception e) {
            // log(e) there is an error in calling codes api
        }
        return result;
    }

//second api 
public Point findPoints(String userName) {
        Point result = null;
        try {

            result = restTemplate.getForObject("localhost:8080/api/points?userName=" + userName, Point.class);

        } catch (Exception e) {
            // log(e) there is an error in calling points api
        }
        return result;
    }

//method calling both of them 

    @Async
public CompletableFuture<PointsWithCodesResponse> callTwoApis(String userName, String codeID) {
    PointsWithCodesResponse response = new PointsWithCodesResponse();
    response.setCodes(findCodes(codeID));
    response.setPoints(findPoints(userName));
    return CompletableFuture.completedFuture(response).exceptionally(t -> {
        //log and handle ex, how to know if it's from first api or second
        return null;
    });
}

оба api используются в других частях приложения, и каждая из них имеет свою собственную обработку для исключения и ведения журнала

...