DocumentazioneGuida per gli sviluppatori di Target

Richieste asincrone (Java)

Ultimo aggiornamento: 20 luglio 2024
  • Argomenti:
  • APIs/SDKs

Creato per:

  • Sviluppatore

Descrizione

Uno dei vantaggi dell'integrazione lato server è la possibilità di sfruttare l'enorme larghezza di banda e le risorse informatiche disponibili sul lato server utilizzando il parallelismo. L'SDK Java Target supporta le richieste asincrone, che possono ridurre il tempo di destinazione effettivo a zero.

Metodi supportati

Metodi

CompletableFuture<TargetDeliveryResponse> getOffersAsync(TargetDeliveryRequest request);
CompletableFuture<ResponseStatus> sendNotificationsAsync(TargetDeliveryRequest request);
CompletableFuture<Attributes> getAttributesAsync(TargetDeliveryRequest targetRequest, String ...mboxes);

Esempio

Un esempio di controller applicazione Spring potrebbe essere simile al seguente:

Controller di esempio

@RestController
public class TargetRestController {

    @Autowired
    private TargetClient targetJavaClient;

    @GetMapping("/mboxTargetOnlyAsync")
        public TargetDeliveryResponse mboxTargetOnlyAsync(
                @RequestParam(name = "mbox", defaultValue = "server-side-mbox") String mbox,
                HttpServletRequest request, HttpServletResponse response) {
            ExecuteRequest executeRequest = new ExecuteRequest()
                    .mboxes(getMboxRequests(mbox));

            TargetDeliveryRequest targetDeliveryRequest = TargetDeliveryRequest.builder()
                    .context(getContext(request))
                    .execute(executeRequest)
                    .cookies(getTargetCookies(request.getCookies()))
                    .build();
            CompletableFuture<TargetDeliveryResponse> targetResponseAsync =
                    targetJavaClient.getOffersAsync(targetDeliveryRequest);
            targetResponseAsync.thenAccept(tr -> setCookies(tr.getCookies(), response));
            simulateIO();
            TargetDeliveryResponse targetResponse = targetResponseAsync.join();
            return targetResponse;
        }

    /**
     * Function for simulating network calls like other microservices and database calls
     */
    private void simulateIO() {
        try {
            Thread.sleep(200L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}

L'esempio presuppone che abbiate inizializzato l'SDK come molla e che abbiate metodi di utilità disponibili.

La richiesta Target viene attivata prima di simulateIO e al momento dell'esecuzione anche il risultato di destinazione dovrebbe essere pronto. Anche se non lo è, nella maggior parte dei casi si otterranno risparmi significativi.

recommendation-more-help
6906415f-169c-422b-89d3-7118e147c4e3