Al pasar los mensajes de error desde SSE (Webflux) Primavera de arranque aplicación angular 7 frontend

Jay:

Mi aplicación es una aplicación de la primavera de arranque con varios criterios de valoración. Estamos tratando de agregar un punto final SSE activado, utilizando Webflux.

Caso de uso:

Paso 1: Recepción-final envía una solicitud a un punto final POST y obtiene un identificador único.

Paso 2: recuperaciones finales delanteras procesan resultado utilizando un punto final GET (SSE activar - Flux)

usos angulares Eventsource objeto de consumir el punto final SSE. Se requiere que el punto final al texto producirlo / evento-stream. Funciona muy bien para los casos positivos de la prueba. Pero cuando se lanzan excepciones de tiempo de ejecución del servicio, frontend angular no puede obtener los códigos de estado HTTP y los detalles de la excepción. Simplemente errores sin datos.

excepciones lanzadas:

@ResponseStatus(code = HttpStatus.NOT_FOUND)
public class RequestNotFoundException extends RuntimeException {

    private static final long serialVersionUID = 1L;

    public RequestNotFoundException(String message) {
        super(message);
    }
}

Como se menciona en este , el retorno de una Flux<ServerSentEvent>y terminando el flujo con un evento personalizado:

punto final de Java

 @GetMapping(path= "{id}/async", produces=MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<Optional<ProcessedResult>>> getProcessedResultStream(
        @PathVariable("id") @ApiParam(value = "The unique identifier of the request", required = true) String id)
        throws InterruptedException {
    // Combining data and adding a disconnect event to handle at the frontend.
    return Flux.concat(
            Flux.just(ServerSentEvent.<Optional<ProcessedResult>>builder(service.getProcessedResult(id))
                    .build()),
            Flux.just(ServerSentEvent.<Optional<ProcessedResult>>builder().event("disconnect").build()));
}

Esto ayuda a cerrar la conexión al final de interfaz de usuario desconectándolo. Pero mi principal problema sigue abierto. ¿Cómo debo ir sobre la propagación de mensajes de error de nuevo a la interfaz? Todos los demás puntos finales (normales) lanzan excepciones de tiempo de ejecución de encargo con códigos HTTP adecuadas que se indican anteriormente.

¿Debo cambiar mi clase ProcessedResult tomar también detalles de la excepción?

Nemoy:

Eventos del lado del servidor utilizan una conexión HTTP abierto a transmitir contenido desde el servidor. De acuerdo a las especificaciones de W3C de Eventsource HTTP 200 respuestas OK con una cabecera Content-Type adecuado se requiere para establecer la conexión, HTTP 500, 502, 503, 504o cualquier otro error de la red hará que el navegador para restablecer la conexión. Si se cumple ninguno de los casos anteriores un evento de error se activa con readyState = 'CLOSED'. En resumen, la onErrordevolución de llamada es sólo para el manejo de los tiempos de espera de red o problemas de control de acceso.

No es posible enviar un código de estado HTTP diferente en función de tiempo de ejecución excepción puesto que ya envía 200 Ok cuando se establece la conexión. La única manera de error de identificador de tiempo de ejecución es atrapar la excepción y envía un evento personalizado con nombre del servidor y closeel EvetSourcebasado en eso.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=168281&siteId=1
Recomendado
Clasificación