Obtenga más información sobre la configuración de Spring Cloud Ribbon

Colocación regular

1. Deshabilite Eureka.
Después de agregar la anotación @LoadBalanced a RestTemplate, podemos usar el nombre del servicio para llamar a la interfaz. Cuando hay varios servicios, también se puede realizar el equilibrio de carga.

Esto se debe a que la información del servicio en Eureka se ha extraído localmente en el cliente. Si no queremos integrarnos con Eureka, podemos deshabilitarlo mediante el siguiente método de configuración.

# 禁用 Eureka
ribbon.eureka.enabled=false

Cuando deshabilitamos Eureka, el nombre del servicio no se puede usar para llamar a la interfaz y se debe especificar la dirección del servicio.

2. Configure la lista de direcciones de la interfaz. Como
mencionamos anteriormente, Eureka se puede deshabilitar. Después de deshabilitar, debe configurar manualmente la dirección del servicio de llamada. La configuración es la siguiente:

# 禁用 Eureka 后手动配置服务地址
ribbon-config-demo.ribbon.listOfServers=localhost:8081,localhost:8083

Esta configuración es para servicios específicos. El prefijo es el nombre del servicio. Después de la configuración, puede usar el nombre del servicio para llamar a la interfaz como antes.

3. Configure la estrategia de equilibrio de carga La estrategia
predeterminada de Ribbon es el sondeo Como se puede ver en el resultado del ejemplo que explicamos anteriormente, Ribbon proporciona muchas estrategias, que se explicarán más adelante. Mediante la configuración, podemos especificar qué estrategia utiliza el servicio para realizar operaciones de carga.
4 **. Tiempo de espera **
Hay dos configuraciones relacionadas con el tiempo en la cinta, que son el tiempo de espera para la conexión de la solicitud y el tiempo de espera para el procesamiento de la solicitud. Las reglas de configuración son las siguientes:

# 请求连接的超时时间
ribbon.ConnectTimeout=2000
# 请求处理的超时时间
ribbon.ReadTimeout=5000

也可以为每个Ribbon客户端设置不同的超时时间, 通过服务名称进行指定:
ribbon-config-demo.ribbon.ConnectTimeout=2000
ribbon-config-demo.ribbon.ReadTimeout=5000

5. Parámetros de simultaneidad

# 最大连接数
ribbon.MaxTotalConnections=500
# 每个host最大连接数
ribbon.MaxConnectionsPerHost=500

Cinta de configuración de código

La forma más sencilla de configurar Ribbon es a través de archivos de configuración. Por supuesto, también podemos configurarlo mediante código.

Para configurar la estrategia de carga previamente personalizada a través del código, primero debe crear una clase de configuración e inicializar la estrategia personalizada. El código se muestra a continuación.

@Configuration
public class BeanConfiguration {
  @Bean
  public MyRule rule() {
    return new MyRule();
  }
}

Cree una clase de configuración de cliente Ribbon, asocie BeanConfiguration, use name para especificar el nombre del servicio llamado, el código se muestra a continuación.

@RibbonClient(name = "ribbon-config-demo", configuration = BeanConfiguration.class)
public class RibbonClientConfig {
}

Puede eliminar la configuración de la política en el archivo de configuración anterior, luego reiniciar el servicio y acceder a la interfaz para ver el mismo efecto que antes.

Configurar Ribbon en modo de archivo de configuración

Además de usar código para configurar la cinta, también podemos especificar la configuración correspondiente para la cinta a través del archivo de configuración:

<clientName>.ribbon.NFLoadBalancerClassName: Should implement ILoadBalancer(负载均衡器操作接口)
<clientName>.ribbon.NFLoadBalancerRuleClassName: Should implement IRule(负载均衡算法)
<clientName>.ribbon.NFLoadBalancerPingClassName: Should implement IPing(服务可用性检查)
<clientName>.ribbon.NIWSServerListClassName: Should implement ServerList(服务列表获取)
<clientName>.ribbon.NIWSServerListFilterClassName: Should implement ServerList­Filter(服务列表的过滤)

Mecanismo de reintento

En un entorno de clúster, se utilizan varios nodos para proporcionar servicios y es inevitable que un nodo falle. Al usar Nginx para el equilibrio de carga, si su aplicación no tiene estado y puede lanzarse de forma continua, debe reiniciar la aplicación una por una, por lo que el impacto en los usuarios es relativamente pequeño, porque Nginx no puede reenviar la solicitud La solicitud será reenviado a otra instancia nuevamente.

Dado que Eureka se basa en el principio de AP, a expensas de la coherencia de los datos, cada servicio de Eureka guardará la información del servicio registrado. Cuando no se puede mantener el pulso entre el cliente registrado y Eureka, puede deberse a la red o al servicio. .Colgado.

En este caso, Eureka también guardará la información de registro durante un período de tiempo. En este momento, el cliente puede obtener la información del servicio que se ha colgado, por lo que Ribbon puede obtener la información del servicio que ha expirado, lo que provocará una solicitud fallida.

Podemos utilizar el mecanismo de reintento para evitar este tipo de problemas. El mecanismo de reintento es solicitar otro servicio nuevamente cuando Ribbon encuentra que el servicio solicitado no está disponible.

**1. RetryRule 重试**
解决上述问题,最简单的方法就是利用 Ribbon 自带的重试策略进行重试,此时只需要指定某个服务的负载策略为重试策略即可:

ribbon-config-demo.ribbon.NFLoadBalancerRuleClassName = com.netflix.loadbalancer.RetryRule

**2. Spring Retry 重试**
除了使用 Ribbon 自带的重试策略,我们还可以通过集成 Spring Retry 来进行重试操作。

在 pom.xml 中添加 Spring Retry 的依赖,代码如下所示。
org.springframework.retry spring-retry `` `Configure información como el número de reintentos:` `` # El número de reintentos para la instancia actual ribbon.maxAutoRetries = 1 # El número de reintentos para cambiar la instancia ribbon.maxAutoRetriesNextServer = 3 # Para todas las operaciones Reintentar la solicitud ribbon.okToRetryOnAllOperations = true # Reintentar el código de respuesta Http ribbon.retryableStatusCodes = 500,404,502 ''


Las últimas preguntas de entrevistas de alta frecuencia recopiladas en 2021 (todas organizadas en documentos), hay una gran cantidad de productos secos, incluidos mysql, netty, spring, thread, spring cloud, jvm, código fuente, algoritmo, etc. Explicaciones detalladas, como así como planes de aprendizaje detallados, entrevistas Clasificación de preguntas, etc. Para aquellos que necesitan obtener estos contenidos, agregue Q como: 11604713672

Supongo que te gusta

Origin blog.csdn.net/weixin_51495453/article/details/114418542
Recomendado
Clasificación