Configuração do mecanismo de tentativa de Springcloud
Primeiro de tudo, a nova tentativa aqui não é uma tentativa após um erro, mas uma tentativa de outra instância depois que o cliente de balanceamento de carga descobre que a instância de solicitação remota não está disponível.
@Bean@loadBalancedRestTemplate resttemplate () {httpComponentsClientHttPrequestFactory httPrequestFactory = new HttComponentsClientHttPreQuestFactory (); httPrequestFactory.SetReadTimeout (5000); httPrequestFactory.SetConnectTimeout (5000); Retorne o novo RestTemplate (httPrequestFactory);}Mecanismo de tentativa fingido
Feign está novamente novamente
pacote Feign; importar java estático.util.concurrent.timeunit.seconds;/*** clonado para cada invocação para {@link cliente#execute (request, feig.request.options)}. * As implementações podem manter o estado para determinar se as operações de tentativa devem continuar ou não. * /Repetição de interface pública estende -se clonável { /*** Se a tentativa for permitida, retorne (possivelmente depois de dormir). Caso contrário, propagar a exceção. */ void ContinuorPropagate (RetyableException e); Clone da apresentadora (); Classe estática pública implementa a apresentação {private final int maxattempts; período final privado de longo prazo; MAXPERIOD LONGO PRIVADO PRIVADO; int tentativa; Dormlishlis há muito tempo; public padrão () {this (100, segundos.tomillis (1), 5); } Public padrão (período longo, maxperiod longo, int maxattempts) {this.period = period; this.maxperiod = maxperiod; this.maxattempts = maxattempts; this.attempt = 1; }Feign Cancelar a tentativa
@Beanretryer FeignRetryer () {return retrober.never_retry;}Fibir a configuração do tempo limite da solicitação
@BeanRequest.Options requestOptions (configurableeNvironment Env) {int ribbonReadTimeout = Env.getProperty ("ribbon.readtimeout", int.class, 6000); int ribbonConnectionTimeout = Env.getProperty ("ribbon.connectTimeout", int.class, 3000); Retorne novo solicitação.Options (RibBonConnectionTimeout, RibbonReadTimeout);}Represente de cada componente na nuvem de primavera
Recentemente, muitos sapatos infantis me perguntaram como configurar o componente Spring Cloud XXX para tentar novamente. Este artigo resume.
O mecanismo de tentativa na nuvem de primavera é bastante caótico. Versões diferentes têm certas diferenças e a implementação não é muito diferente. Felizmente, a Spring Cloud Camden se estabilizou basicamente depois dela, e algumas melhorias foram feitas em Dalston. Os detalhes ainda não foram especificados.
Vamos discutir isso em detalhes abaixo.
A versão que eu uso é o Spring Cloud Dalston SR4, que também é adequado para o EDGware e posterior. Para a versão anterior de Dalston, este artigo não discutirá, você pode estudá -lo sozinho.
Represente de fita+Resttemplate
Para o RestTemplate que integra a faixa de opções, por exemplo, um RestTemplate adiciona a anotação @loadBalanced:
@Bean@loadBalancedPublic Resttemplate RestTemplate () {SimpleClientHttPrequestFactory SimpleClientHttPrequestFactory = new SimpleClientHttPrequestFactory (); SimpleClientHttPreQuestFactory.SetConnectTimeout (1000); SimpleClientHttPreQuestFactory.SetReadTimeout (1000); Retorne o novo RestTemplate (SimpleClientHttPrequestFactory);}Nesta base, a tentativa pode ser alcançada usando a seguinte configuração:
Spring: Cloud: LoadBalancer: Réstino: Ativado: Trueribbon: # Número máximo de tentativas para a mesma instância, excluindo a primeira chamada para MaxautoreTries: 1 # Número máximo de tentativas para outras instâncias, excluindo as primeiras retações de servidor selecionado
Feign de nova tentativa
Fainar também tem a capacidade de tentar novamente. No início da nuvem da primavera, o Feign usou feign.Retryer.Default#Default() e tentou 5 vezes. Mas Feign integra a fita e a fita também tem a capacidade de tentar novamente, o que pode levar à confusão no comportamento no momento.
A Spring Cloud percebeu esse problema, por isso fez melhorias para mudar a tentativa de Feign para feign.Retryer#NEVER_RETRY . Se você precisar usar a tentativa de Feign, basta usar a configuração de repetição da Ribbon. Portanto, para as versões Camden e posteriores, a tentativa de Feign pode ser configurada usando as seguintes propriedades:
Fita: Maxautores
Questões relacionadas podem ser encontradas em: https://github.com/spring-cloud/spring-cloud-netflix/issues/467
A tentativa de Zuul
Configuração:
Zuul: # Enable Zuul Remoldable Remoldable: Trueribbon: Maxautores
Acima, usamos zuul.retryable=true para habilitar a nova tentativa globalmente para Zuul. De fato, também podemos ativar/desligar a rota especificada:
zuul.Routes. <Routename> .retryable = true
A prioridade da configuração local é maior.
Representar com base no código de resposta HTTP
ClientName: Ribbon: Retryablestatuscodes: 404.502
Observação:
O tempo limite do Hystrix deve ser maior que o tempo limite, caso contrário, uma vez que o tempo limite do Hystrix, não há como continuar tentando novamente.
De um modo geral, não é recomendável definir ribbon.OkToRetryOnAllOperations como TRUE. Como uma vez que essa configuração está ativada, qualquer operação é repetida, incluindo solicitações de postagem e, como o corpo da solicitação é armazenado em cache, os recursos do servidor podem ser afetados no momento.
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.