Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 22130|Resposta: 3

[Frame] . Resiliência .NET e manejo de falhas transitórias Estratégia de retentativas Polly

[Copiar link]
Publicado em 28/05/2019 23:54:53 | | | |
Este post foi editado pela última vez por Kongcida em 29-05-2019 às 23:16

prefácio
Em um projeto, haverá problemas na operação do projeto devido a razões incontroláveis. Por exemplo, uma falha de servidor, uma falha de serviço, queda de rede, etc. Encontrando alguns erros retentáveis, podemos usar o Polly —— . Bibliotecas de Tratamento de Falhas Elásticas e Transitórias .NET. Endereço oficial do site do projeto (O login do hiperlink está visível.)。 Hoje, este artigo vai documentar a má estratégia de tentativas de Polly.


Ambiente e Ferramentas


>VS 2017
>Sistema Windows 10


Texto


1: Criar um novo aplicativo de console.

2: Cita Polly. Disponível para download no pacote NuGet

3: Cole o código



4: F6 gera. Depois, encontre o arquivo .exe gerado na pasta de depuração – > clique duas vezes para executar.



Você pode ver a mensagem de saída: Tentado novamente três vezes.

Quando o F5 está depurando, você também pode ver que esse método já foi feito três vezes.


A estratégia de retentativa da Polly é explicada em detalhes

1: Tipo de exceção


Neste código, o :handle contém o tipo de exceção a ser tentado novamente. Ou seja, quando o código executado produz uma exceção específica, a função de tentativa é executada. Caso contrário, nenhuma tentativa será realizada. Porque algumas exceções não exigem uma nova tentativa.

Claro, podemos preencher vários tipos específicos de exceção aqui para tentar novamente.



O DivideByZeroException aqui representa uma exceção que tenta dividir por zero.
SqlException indica uma exceção que é levantada quando o SqlServer retorna um erro ou aviso. Por exemplo, falha na conexão com banco de dados, erro de execução SQL, etc.
SmtpException indica uma exceção levantada pelo serviço postal. Por exemplo, o envio falhou, a conexão de rede falhou e as informações da conta de e-mail ficaram anormais.

Para tipos específicos de exceção, consulte a documentação oficial da Microsoft:



2: Tipo de tentativa

1) O primeiro tipo de tentativa é um número direto determinado de tentativas. O código a seguir é tentado novamente apenas 3 vezes.

Podemos chamar as ações relevantes realizadas em cada tentativa ao tentar novamente. O código a seguir é outra encomenda posterior. Ao realizar uma tentativa novamente, o número de tentativas e o motivo da exceção são impressos.



Também podemos manter o código tentando novamente até que dê certo.



2) O segundo tipo de tentativa é tentar novamente em intervalos. O código a seguir significa tentar novamente a cada 2 segundos, 7 segundos ou 10 segundos. Retente para 10 segundos. Se a execução não for bem-sucedida, encerre a tentativa novamente.



Também podemos tentar novamente em intervalos até que a tentativa seja bem-sucedida. Isso requer o cálculo de uma função.



O código acima refere-se à tentativa de potência do indireto 2. Por exemplo, se a execução falhar, a primeira vez será tentada novamente em intervalos de 2 segundos, a segunda será tentada novamente em intervalos de 4 segundos e a terceira será tentada novamente em intervalos de 8 segundos......... E assim por diante. Até que a execução seja bem-sucedida.



Epílogo


Nota: Os tipos de exceção no código Handle acima devem ser preenchidos de acordo com a situação real no seu projeto real. Nem todas as exceções exigem uma tentativa de novo.

O tipo de exceção é a classe base para todas as exceções. É melhor não preencher isso na alça, caso contrário, isso terá consequências muito sérias.














Anterior:. O valor de devolução do IPN do PayPal com integração na internet sempre foi INVÁLIDO
Próximo:C# Uso de palavras-chave de rendimento
Publicado em 29/05/2019 09:17:54 |
Eu mesmo implementei o mecanismo de retentativa no AOP e, no final, descobri que a biblioteca Polly pode atender às minhas necessidades, mas minha função foi implementada, e eu me refiro a uma biblioteca de terceiros, que pode ter algum código inútil, que não consegue otimizar meu sistema, então não é útil por enquanto.

Anexado está meu código:



Quando eu tiver tempo, também vou pesquisar sobre a Polly
Publicado em 29/05/2019 09:22:01 |
Xiao Zhaozha Postado em 29-05-2019 09:17
Eu mesmo implementei o mecanismo de retentativa no AOP e, no final, descobri que a biblioteca Polly poderia atender minhas necessidades, mas minha função foi implementada, e a introdução ...

Não há nada de errado em fazer pequenas necessidades assim sozinho
E você deveria esperar pela próxima vez para tentar novamente
Publicado em 29/05/2019 09:29:22 |
ventos postado em 29-05-2019 09:22
Não há nada de errado em fazer pequenas necessidades assim sozinho
E você deveria esperar pela próxima vez para tentar de novo?

Não, a exceção deve ser causada por conflitos de concorrência, inserção de dados, atualização e exclusão, mas deve haver um que execute com sucesso, ....... O código omitido envolve a transação, e a exceção será automaticamente revertida. Na segunda tentativa, o conflito desapareceu, então não defini tempo de espera.
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com