El disyuntor Ribbon + Hystrix se da cuenta de la degradación y fusión de los microservicios

Cuando el microservicio está inactivo, Ribbon no puede reenviar la solicitud, por lo que se presenta Hystrix.

Las funciones principales del cortocircuito Hystrix:

  1. Degradación: cuando el microservicio en segundo plano no está disponible o se agota el tiempo de espera de acceso, se convertirá en la ejecución del código degradado, devolverá un mensaje de error o devolverá los datos almacenados en caché;
  2. Fusible: en la configuración predeterminada, el microservicio en segundo plano recibe 20 solicitudes en 10 segundos, y la mitad de las solicitudes (50%) tienen una falla y degradación de la solicitud, luego Hystrix abre el disyuntor (el disyuntor está cerrado de forma predeterminada), lo que significa El microservicio en segundo plano no está disponible, deje que todas las solicitudes ejecuten el código degradado; cuando el disyuntor se abre durante 5 segundos, se convierte en un estado medio abierto, lo que significa que cuando llega una solicitud, intentará reenviarla al microservicio en segundo plano. Si la solicitud es exitosa, el cortocircuito se cierra, lo que significa que todas las solicitudes pueden solicitar llegar al microservicio en segundo plano; si la solicitud aún falla, el cortocircuito permanece abierto.

1. Cree un proyecto SpringBoot y agregue dependencias:

El disyuntor Ribbon + Hystrix se da cuenta de la degradación y fusión de los microservicios

 

2. Agregue la dependencia de Hystrix:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

3. Agregue la dependencia de clase de herramienta común de su propio proyecto:

El disyuntor Ribbon + Hystrix se da cuenta de la degradación y fusión de los microservicios

 

4.Realice la configuración relevante en el archivo application.yml:

El disyuntor Ribbon + Hystrix se da cuenta de la degradación y fusión de los microservicios

 

5. Agregue las anotaciones @EnableCircuitBreaker y @EnableDiscoveryClient a la clase de inicio principal:

Estas tres anotaciones pueden ser reemplazadas por @SpringCloudApplication

El disyuntor Ribbon + Hystrix se da cuenta de la degradación y fusión de los microservicios

 

6. Cree la clase RibbonController, escriba el método del controlador de springMVC en esta clase, especifique el método de degradación correspondiente y marque el método de degradación especificado mediante una anotación en el método del controlador:

package com.tedu.sp7.controller;
import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;import com.tedu.sp01.pojo.Item;import com.tedu.sp01.pojo.Order;import com.tedu.sp01.pojo.User;import com.tedu.web.util.JsonResult;@RestControllerpublic class RibbonController {    @Autowired    private RestTemplate rt;    @GetMapping("/item-service/{orderId}")
    @HystrixCommand(fallbackMethod = "getItemsFB") //指定降级方法的方法名
    public JsonResult<List<Item>> getItems(@PathVariable String orderId) {        return rt.getForObject("http://item-service/{1}", JsonResult.class, orderId);
    }    @PostMapping("/item-service/decreaseNumber")
    @HystrixCommand(fallbackMethod = "decreaseNumberFB")
    public JsonResult decreaseNumber(@RequestBody List<Item> items) {        return rt.postForObject("http://item-service/decreaseNumber", items, JsonResult.class);
    }    /    @GetMapping("/user-service/{userId}")
    @HystrixCommand(fallbackMethod = "getUserFB")
    public JsonResult<User> getUser(@PathVariable Integer userId) {        return rt.getForObject("http://user-service/{1}", JsonResult.class, userId);
    }    @GetMapping("/user-service/{userId}/score") 
    @HystrixCommand(fallbackMethod = "addScoreFB")
    public JsonResult addScore(@PathVariable Integer userId, Integer score) {        return rt.getForObject("http://user-service/{1}/score?score={2}", JsonResult.class, userId, score);
    }    /    @GetMapping("/order-service/{orderId}")
    @HystrixCommand(fallbackMethod = "getOrderFB")
    public JsonResult<Order> getOrder(@PathVariable String orderId) {        return rt.getForObject("http://order-service/{1}", JsonResult.class, orderId);
    }    @GetMapping("/order-service")
    @HystrixCommand(fallbackMethod = "addOrderFB")
    public JsonResult addOrder() {        return rt.getForObject("http://order-service/", JsonResult.class);
    }    /    //降级方法的参数和返回值,需要和原始方法一致,方法名任意
    public JsonResult<List<Item>> getItemsFB(String orderId) {        return JsonResult.err("获取订单商品列表失败");
    }    public JsonResult decreaseNumberFB(List<Item> items) {        return JsonResult.err("更新商品库存失败");
    }    public JsonResult<User> getUserFB(Integer userId) {        return JsonResult.err("获取用户信息失败");
    }    public JsonResult addScoreFB(Integer userId, Integer score) {        return JsonResult.err("增加用户积分失败");
    }    public JsonResult<Order> getOrderFB(String orderId) {        return JsonResult.err("获取订单失败");
    }    public JsonResult addOrderFB() {        return JsonResult.err("添加订单失败");
    }}

Configuración común de Hystrix:

  • hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
    tiempo de espera de solicitud, después de que el tiempo de espera desencadena la degradación por falla
  • hystrix.command.default.circuitBreaker.requestVolumeThreshold El
    número de solicitudes en 10 segundos, el valor predeterminado es 20. Si no se alcanza el número, incluso si todas las solicitudes fallan, el disyuntor no se activará para abrir
  • hystrix.command.default.circuitBreaker.errorThresholdPercentage El
    porcentaje de solicitudes fallidas. Cuando se alcanza este porcentaje, el disyuntor se activa para abrir
  • hystrix.command
    .

Supongo que te gusta

Origin blog.csdn.net/qq_45401061/article/details/108721325
Recomendado
Clasificación