enlace de punto de conglomerado

"Enlace de punto de clúster" muestra el recurso recién llamado (independiente en tiempo real), y la página de enlace de punto de clúster (enlace de llamada independiente) extrae el estado de ejecución del recurso de cliente especificado en tiempo real.

Proporciona un total de dos modos de visualización: uno utiliza una estructura de árbol para mostrar el enlace de llamada del recurso y el otro muestra el funcionamiento del recurso sin distinguir el enlace de llamada.

Nota: la supervisión del clúster es información en memoria, solo muestra los recursos que se llamaron después del inicio.

Se muestra en la vista de árbol de forma predeterminada

imagen
  • La lista muestra todas las interfaces bajo el servicio, incluyendo pasar QPS, rechazar QPS, número de subprocesos, RT promedio, pasar en minutos, rechazar en minutos.
  • 172.20.10.3:8721 es la dirección IP del servicio actual, y el puerto es el puerto que atiende la interacción de la consola de Sentinel. El servicio iniciará un HttpServer ocupado por este puerto localmente, y el servidor interactuará con la consola de Sentinel. Para Por ejemplo, la consola Sentinel agrega Si se establece una regla de limitación actual, los datos de la regla se enviarán al HttpServer para recibirlos, y el HttpServer luego registrará la regla en Sentinel.
  • Puede agregar operaciones como control de flujo, degradación, punto de acceso y autorización al recurso actual.

Vista de la lista:imagen

Podemos ver que debajo de la lista de operaciones, hay opciones como control de flujo, degradación, punto de acceso, autorización, etc.

A continuación, presentaremos las funciones anteriores en detalle.

Entorno de prueba (clúster de microservicios)

archivo pom padre

        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <spring-boot.version>2.3.2.RELEASE</spring-boot.version>
        <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>

Estructura del código de un vistazo

imagen

Implementación de varios nodos de Producer

imagen

productor

/**
 * 生产者controller
 *
 * @author issa
 **/

@RefreshScope
@RequestMapping(value = "/producer")
@RestController
public class ProducerController {

    @GetMapping("/{id}")
    @SentinelResource("test")
    public String producerById(@PathVariable(value = "id") String id) {

        ProducerVO producerVO = new ProducerVO();
        producerVO.setId(id);
        producerVO.setPort(UUID.randomUUID().toString());

        return producerVO.toString();
    }
}

Clase de inicio del productor

/**
 * 生产者
 *
 * @author issa
 **/

@EnableDiscoveryClient
@SpringBootApplication
public class ProducerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.classargs);
    }

}

consumidor

/**
 * 消费者controller
 *
 * @author issavior
 **/

@RequestMapping(value = "/consumer")
@RestController
@RefreshScope
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private ProducerFeign producerFeign;

    @GetMapping("/rest/{id}")
    @SentinelResource("rest")
    public String restConsumerById(@PathVariable(value = "id") String id) {

        return restTemplate.getForObject("http://ossa-service-producer/producer/" + id, String.class);
    }

    @GetMapping("/feign/{id}")
    @SentinelResource("feign")
    public String feignConsumerById(@PathVariable(value = "id") String id) {

        return producerFeign.producerById(id);
    }
}

clase de inicio del consumidor

/**
 * 消费者
 *
 * @author issavior
 */

@EnableFeignClients("com.ossa.common.feignapi")
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.classargs);
    }

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {

        return new RestTemplate();
    }
}

feignapi

/**
 * @author issavior
 */

@FeignClient(value = "ossa-service-producer")
@RequestMapping(value = "/producer")
public interface ProducerFeign {

    /**
     * 根据ID查询商品
     *
     * @param id 商品的主键ID
     * @return 相关商品的信息
     */

    @GetMapping("/{id}")
    String producerById(@PathVariable(value = "id") String id);
}