[SpringBoot] El principio de funcionamiento de Hystrix de SpringBoot (13)

Cómo funciona Hystrix

  Diagrama de flujo:

  

  Cada sección explicará este proceso con más detalle HystrixCommand.run

  1. Construir un objeto HystrixCommand o HystrixObservableCommand
  2. Comando de ejecución
  3. ¿La respuesta está en caché?
  4. ¿Está abierto el disyuntor?
  5. ¿Está lleno el grupo de hilos / cola / semáforo?
  6. HystrixObservableCommand.construct () o HystrixCommand.run()
  7. Circuito informático de salud
  8. Obtener Fallback
  9. Devolver una respuesta exitosa

1. Construya un objeto HystrixCommand o HystrixObservableCommand

  El primer paso es construir un objeto HystrixCommand o HystrixObservableCommand para representar su solicitud de dependencias. Pase los parámetros necesarios para realizar una solicitud al constructor.

  HystrixCommand construye un objeto si espera que la dependencia devuelva una sola respuesta. Por ejemplo:

Comando HystrixCommand = nuevo HystrixCommand (arg1, arg2);
 

  HystrixObservableCommand construye un objeto si espera que la dependencia devuelva un Observable que emite una respuesta . Por ejemplo:

Comando HystrixObservableCommand = nuevo HystrixObservableCommand (arg1, arg2);

 

2. Ejecute el comando

  Al usar uno de los siguientes cuatro métodos del objeto de comando Hystrix, puede ejecutar los cuatro métodos del comando (los primeros dos solo se aplican a objetos HystrixCommand simples, no a HystrixObservableCommand):

  ejecutar () - hasta la parada, a continuación, devolver una única respuesta recibida de la dependencia (o lanzar una excepción en el caso de un error)
  Cola () - devuelve un futuro, lo cual se puede obtener la dependencia única respuesta
  observe () - suscripción, El Observable representa la respuesta devuelta por la dependencia y devuelve el Observable para copiar la fuente. Observable
  toObservable (): devuelve un Observable, cuando se suscribe, ejecutará el comando Hystrix y emitirá su respuesta

Valor K = command.execute ();
Futuro <K> fValue = command.queue ();
Observable <K> ohValue = command.observe (); // caliente observable
Observable <K> ocValue = command.toObservable (); // frío observable

  Llame a execute () sincrónicamente a call queue (). Get (). queue () llama a Observable (). toBlocking (). toFuture () a su vez. Esto significa que, al final, cada implementación de HystrixCommand es compatible con la implementación Observable, incluso aquellas que están diseñadas para devolver un único valor simple.

3. ¿Se almacena en caché la respuesta?

  Si el almacenamiento en caché de solicitudes está habilitado para este comando, y si la respuesta a la solicitud está disponible en el caché, la respuesta en caché se devolverá como Observable inmediatamente.

4. ¿Está abierto el disyuntor?

  Cuando ejecute este comando, Hystrix verificará el interruptor de circuito para ver si el circuito está abierto.

  Si el circuito está abierto (o "disparado"), Hystrix no ejecutará el comando, pero enrutará el flujo a (8) para un retroceso.

  Si el circuito está cerrado, el flujo pasa a (5) para verificar si hay capacidad disponible para ejecutar comandos.

5. ¿Está lleno el grupo de hilos / cola / semáforo?

  Si el grupo de hilos y la cola (o semáforo, si no se ejecutan en un hilo) asociados con el comando están llenos, Hystrix no ejecutará el comando, pero inmediatamente enrutará el flujo a (8) para una reversión.

6 、 HystrixObservableCommand.construct () 或 HystrixCommand.run ()

  Aquí, Hystrix invoca una solicitud de dependencia mediante un método escrito para este propósito (uno de los siguientes):

  HystrixCommand.run (): devuelve una sola respuesta o genera una excepción
  HystrixObservableCommand.construct (): devuelve un Observable que envía una respuesta o envía una notificación onError
  Si el método run () o construct () excede el valor del tiempo de espera del comando, el subproceso arrojará TimeoutException (si el comando en sí no se ejecuta en su propio hilo, ese hilo arrojará un hilo de temporizador separado). En ese caso, Hystrix respondió con 8 rutas. Obtenga Fallback, si el método no cancela / interrumpe, descartará el valor de retorno final del método run () o construct ().

7. Circuito informático de salud

  Hystrix informa el éxito, el fracaso, el rechazo y el tiempo de espera al disyuntor, y el disyuntor mantiene un conjunto continuo de contadores para calcular las estadísticas.

  Utiliza estas estadísticas para determinar cuándo debe "dispararse" el circuito, en este punto hará un cortocircuito en todas las solicitudes posteriores hasta que haya transcurrido el período de recuperación, después de lo cual, después de comprobar primero ciertas comprobaciones de estado, Cierra el circuito.

8. Obtener Fallback

  Hystrix intenta recuperarse a su estado de respaldo cuando falla la ejecución del comando: cuando se genera construct () o se ejecuta una ejecución () (6.), el comando se cortocircuita debido a una desconexión del circuito (4.), el grupo de hilos y la cola o señal del comando La cantidad es la capacidad máxima (5), o el comando ha excedido su tiempo de espera.

  Escriba fallbacks para proporcionar una respuesta genérica desde el caché en la memoria o mediante otra lógica estática sin ninguna dependencia de la red. Si debe usar una llamada de red en la reserva, debe usar otro HystrixCommand o HystrixObservableCommand.

  Para HystrixCommand, para proporcionar una lógica de reserva, puede implementar HystrixCommand.getFallback (), que devuelve un único valor de reserva.

  Para HystrixObservableCommand, para proporcionar una lógica de reserva, puede implementar HystrixObservableCommand.resumeWithFallback () la lógica, que devuelve un Observable, que puede emitir uno o más valores de reserva.

  Si el método alternativo devuelve una respuesta, Hystrix devolverá esta respuesta a la persona que llama. Para un HystrixCommand.getFallback (), devolverá un Observable, que emite el valor devuelto por el método. En este caso, HystrixObservableCommand.resumeWithFallback () devolverá el mismo Observable devuelto por el método.

  Si no se ha implementado un método de reserva para el comando Hystrix, o la reserva en sí genera una excepción, Hystrix aún devolverá un Observable, pero no emitirá nada y terminará inmediatamente con una notificación onError. Con esta notificación onError, la excepción que provocó el fallo del comando se devuelve a la persona que llama. (La implementación de una implementación alternativa puede fallar, lo cual es una mala práctica. Debe implementar una alternativa para que no ejecute ninguna lógica que pueda fallar).

9. Devuelve una respuesta exitosa

  Si el comando Hystrix se ejecuta con éxito, devolverá una o más respuestas a la persona que llama Observable en forma de

 

Supongo que te gusta

Origin www.cnblogs.com/h--d/p/12716997.html
Recomendado
Clasificación