springcloud (interruptor Hystrix)

1. Comprender Hystrix

1.1. Avalancha

  • En una escena de la película a menudo, no lloran en la punta de la nieve debe caer vibraciones sonoras pueden causar pequeña bola de nieve, bola de nieve con la caída puede haber dado lugar a un colapso de la reacción en cadena de la totalidad de las montañas cubiertas de nieve, esta es la vida en la avalancha, lo mismo es cierto en el servicio dentro de las micro, servicio de micro llamado es muy complejo, una solicitud a menudo toma una gran cantidad de micro-servicios a través de la terminación de la cadena de llamadas en todo el micro-servicio, si falla un servicio, que hará que la totalidad de las anomalías de llamada cadena de llamadas, e incluso puede conducir a parálisis de los enteros micro-servicios, - este es el efecto avalancha.

1.2.Hystrix Introducción

  • Hystrix extranjera conocido sitio web de videos Netflix son muy populares de código abierto marco de arquitectura de alta disponibilidad. Hystrix puede ser la solución perfecta para una arquitectura de sistema distribuido para crear un servicio de alta disponibilidad enfrentado una serie de problemas técnicos.
  • Inglés es el puercoespín Hystrix, la traducción al chino de la mecha, la idea viene de nuestro interruptor de seguro de hogar, cuando se produce un cortocircuito en el hogar, recorte cortar rápidamente del circuito para garantizar la seguridad del personal en casa, su objetivo es jugar un papel protector.
  • Sencillo de entender Hystrix avalancha problema puede ser resuelto por medio de la fusión y la rebaja, es un componentes de protección de micro-servicio.

El papel de 1.3.Hystrix

  • el aislamiento de los recursos(Limitación) incluyen:el aislamiento del grupo de subprocesosyel aislamiento de semáforoRestringir el servicio de llamadas de uso de recursos distribuidos, una llamada a un problema de servicio no afecta a otras llamadas de servicio.
    Aquí Insertar imagen Descripción
  • Soplado: Cuando el número de solicitudes alcanza un umbral predeterminado están presentes fallos de servicio (tiempo de espera), marcas de servicio Hystrix ponen el estado de cortocircuito.

En circunstancias normales, el interruptor está en un estado cerrado (cerrada), si se abre el error de tiempo de espera de duración de la llamada, o el circuito en el estado expandido (Open), todas las llamadas en un período posterior se rechaza (la FailFast), algún tiempo después, el protector vamos a tratar de entrar en el estado semi-fundido (medio abierto), lo que permite una pequeña petición cantidad viene a tratar, si la llamada falla, el retorno al estado del fusible, si la llamada tiene éxito, el retorno al estado de circuito cerrado;

  • Rebaja: un caso altamente concurrente, para asegurarse de que algunos de los principales servicios tienen recursos suficientes para no ver el problema, piensan en el desvío de algún servicio insignificante, y luego regresar algunos de los datos que sustentan a una serie de consejos fáciles de usar.

Como el cierre de algunos negocios de menor importancia en dos o las once de Taobao, Taobao con el fin de permitir que la actividad principal de los recursos adecuados, elegirá, como no son reembolsables y no pueden ser evaluados durante los dos días once y así sucesivamente, cuando vas a un reembolso es temporalmente incapaz de retorno reembolso rápido para usted, se trata de los mecanismos de degradación de servicios.

  • Cache: caché interna Hystrix hará que la solicitud y la solicitud de hacer de combinación

2. integración de servicios para Hystrix

  • Modificar springcloud-fin-server-1030 el proyecto se ha integrado la cinta integrado Hystrix,
2.1. La dependencia externa
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2.2. Configuración de clase abierta Hystrix
  • función de fusible abierto por el sello @EnableCircuitBreaker
/**
 * @EnableEurekaServer:开启eurekaServer服务端
 * @EnableCircuitBreaker:开启Hystrix断路器注解
 */
@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker //开启Hystrix熔断
public class OrderServerApplicationConfig {

    //配置一个RestTemplate ,Spring封装的一个机遇Restful风格的http客户端 工具
    //@LoadBalanced :让RestTemplate有负载均衡的功能
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(OrderServerApplicationConfig.class,args);
    }
}
2.3 Método de fusibles
  • Mediante la fusión de método etiqueta etiqueta @HystrixCommand, fallbackMethod especifica método de remanentes etiqueta de propiedad.
//订单服务
@RestController
public class OrderController {

    //需要配置成Bean
    @Autowired
    private RestTemplate restTemplate;

    //负载均衡策略
    @Bean
    public RandomRule randomRule(){
        return new RandomRule();
    }

    //浏览器调用该方法
    @RequestMapping(value = "/order/{id}",method = RequestMethod.GET)

    //方法熔断
    @HystrixCommand(fallbackMethod = "fallbackMethod")
    public User getUserId(@PathVariable("id")Long id){
        //发送http请求调用 user的服务,获取user对象 : RestTemplate
        //user的ip,user的端口,user的Controller路径
        //String url = "http://localhost:1020/user/"+id; 单个用户服务的时候
        String url = "http://user-server/user/" + id;
        return restTemplate.getForObject(url,User.class);
    }

    //断路器熔断后调用的方法
    public User fallbackMethod(@PathVariable("id")Long id) {
        return new User(-1L,"无用户","没有此用户");
    }

}

2.4. Método Recalce
//断路器熔断后调用的方法
    public User fallbackMethod(@PathVariable("id")Long id) {
        return new User(-1L,"无用户","没有此用户");
    }
2.4 Prueba de fusibles
  • Navegador para acceder a http: // localhost: 1030 / pedido / 1, cuando el servicio al cliente springcloud-user-server-1020 se inicia correctamente, puede solicitar el servicio se accede, el navegador puede recibir un resultado, cuando los usuarios apagan el servicio, servicio de pedidos se disparará fusible, fregar datos de retorno.
    Aquí Insertar imagen Descripción

3. La integración de servicios de pago Hystrix

  • Integrado Feign antes del servicio de pago springcloud-paga-server-1040, de hecho, ha integrado Feign Hystrix, pero está desactivada por defecto, tenemos que abrir Hystrix apoyo Feign, y desarrollar fregar el suelo.
3.1. Girar Hystrix
feign:
  hystrix:
    enabled: true #开启熔断支持
  client:
    config:
      remote-service:           #服务名,填写default为所有服务
        connectTimeout: 10300
        readTimeout: 10300
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 10300
fusible 3.2.Fiegn Interfaz
@FeignClient(value = "user-server",fallback = UserFeignClientFallback.class)
public interface UserFeignClient {

    //订单服务来调用这个方法      http://localhost:1020/user/10
    // @GetMapping(value = "/user/{id}" )
    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    User getById(@PathVariable("id")Long id);
}

Consejo: fallback UserFeignClientFallback.class: Esta clase es la clase de implementación de la interfaz actual, clase también está apuntalando el procesamiento de datos en el que el

3.3. Respaldo a lograr
//让Spring扫描到该托底类
@Component
public class FeignClientFallBack implements UserFeignClient {
	//日志打印器
    Logger logger = LoggerFactory.getLogger(FeignClientFallBack.class);

    @Override
    public User getUser(Long id) {
        logger.info("用户服务错误!!!");
        //托底数据
        return new User(-1L,"无用户","没有此用户");
    }
}
  • Consejo: Tenga en cuenta que esta clase necesita a Spirng sustenta la gestión, la necesidad de luchar comentario @Component en la clase, arrastrar las necesidades de la clase para implementar interfaces Feign, la replicación del método para devolver datos fregar el suelo. Cuando Fiegn llamada no puede resultar método de fregar volverá de nuevo al usuario.
3.4 Prueba de arranque

servicios de pago Start, visita: http: // localhost: 1040 / pago / 1, los resultados de las pruebas con las mismas órdenes.

fusible 3.5.Fiegn Interfaz - La segunda manera
1. Encienda Hystrix
feign:
  hystrix:
    enabled: true #开启熔断支持
  client:
    config:
      remote-service:           #服务名,填写default为所有服务
        connectTimeout: 10300
        readTimeout: 10300
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 10300
2. Modificar interfaz Feign

usofallbackFactoryPropiedad, especifica el uso de apuntalamiento planta

@FeignClient(value = "user-server",fallbackFactory = FeignClientFallBackFactory.class)
public interface UserFeignClient {

    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    User getUser(@PathVariable("id")Long id);

}
3. Escribir arrastre el final de la clase
//工厂方式的 , 托底类
@Component
public class UserFeignClientFallbackFactory implements FallbackFactory<UserFeignClient>{

    //拖地方法 : throwable,异常
    @Override
    public UserFeignClient create(Throwable throwable) {
        return new UserFeignClient() {
            @Override
            public User getById(Long id) {
                //把异常信息打印到控制台
                throwable.printStackTrace();

                //真正拖地方法
                return new User(-1L,"无此用户","用户服务不可用");
            }
        };
    
Publicado 33 artículos originales · ganado elogios 0 · Vistas 393

Supongo que te gusta

Origin blog.csdn.net/weixin_45737653/article/details/104987899
Recomendado
Clasificación