es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java Vavr Futuro múltiples llamadas REST.

Quiero ejecutar varias llamadas REST con diferentes resultados de manera asíncrona. Estoy escribiendo el código de la siguiente manera:

“Future” <<“Either”<<“ViolationException”,”Products”>>> products = Future.of(() ->
validateProducts([INPUT])
);

“Future” <<“Either”<<“DomainException”, List<“Category”>>> categories = Future.of(() -> validateCategory([INPUT]));

“Future” <<“Seq”<“Either” <? extends DomainException, ? extends Object>>> finalecall = Future.sequence(List.of(products, categories,…));

Hay aproximadamente 4 a 5 llamadas REST que haré y que quiero que sean asíncronas. Pero como “Future” es genérico y extiende la clase “Object”, no encuentro otra manera de lograr esto.

¿Hay alguna manera de obtener el resultado de todas las llamadas REST que son de “Future” y, después de haber obtenido todos los éxitos o fallos, puedo usar esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, se puede usar la API de Completable Future para esto. CompletableFuture es una poderosa alternativa a Future. Permite adjuntar acciones de finalización a un Future o encadenar varios Futures juntos en un gráfico de cálculos asíncronos. Las ventajas de CompletableFuture sobre Future son:

    • Puede completar explícitamente, cancelar o completar excepcionalmente un CompletableFuture, mientras que con Future, el cálculo se completa cuando está hecho.
    • Puede encadenar varios objetos CompletableFuture entre sí para crear una canalización de cálculos dependientes.
    • Puede usar devoluciones de llamada, como en JavaScript, para manejar los casos de éxito, excepción y cancelación.
    • Puede ejecutar un objeto CompletableFuture en un grupo de subprocesos o directamente en el subproceso actual.

    Aquí hay un ejemplo de fragmento de código que muestra cómo usar CompletableFuture para ejecutar varias llamadas REST de manera asíncrona y recopilar sus resultados:

    CompletableFuture<products> products = CompletableFuture.supplyAsync(() -> validateProducts(INPUT));
    CompletableFuture<><category>> categories = CompletableFuture.supplyAsync(() -> validateCategory(INPUT));
    // Agregue más objetos CompletableFuture para las demás llamadas REST
    
    CompletableFuture<void> allFutures = CompletableFuture.allOf(products, categories, ...);
    allFutures.join(); // Espera a que se completen todos los futuros
    
    List<object> results = new ArrayList<>();
    if (products.isCompletedExceptionally()) {
        // Manejar excepción para products
    } else {
        results.add(products.get());
    }
    if (categories.isCompletedExceptionally()) {
        // Manejar excepción para categories
    } else {
        results.add(categories.get());
    }
    // Agregue bloques similares para los demás objetos CompletableFuture 
    
    // Use la lista de resultados para realizar un procesamiento adicional
    

    En este código, creamos un objeto CompletableFuture para cada llamada REST y los encadenamos en una canalización. Luego creamos otro objeto CompletableFuture que se completa cuando se han completado todos los anteriores. Finalmente, recopilamos los resultados de los futuros completados y los usamos para realizar un procesamiento adicional.

Comments are closed.