Em sistemas distribuídos, para garantir uma forte consistência das transações distribuídas de dados, ao chamar a interface RPC ou enviar MQ, você fará uma operação de repetição para impedir o tempo limite da solicitação de jitter de rede. A maneira mais comum de tentar novamente é o MQ, mas se você não introduzir o MQ em seu projeto, será inconveniente. Este artigo apresenta principalmente como usar a Spring Rety para implementar operações de repetição.
1. Adicione dependências do Maven
<Depencency> <PuerpId> org.springframework.retry </groupId> <TRATIFACTID> Spring-retry </sutifactId> <Version> 1.1.2.Release </sipers> </dependency> <ipendency> </grupId> org.aspectj </groupid> <stifactid> <susersy4> </artiftId>
2. Adicione a configuração da tentativa na inicialização
@SpringbooTApplication @enableretry public class Application {public static void main (string [] args) {springapplication.run (application.class, args); }} 3. Escreva serviço
@Service Public class RemoteService {private Static Final Logger Logger = LoggerFactory.getLogger (testController.class); @Retryable (value = {BusinessException.class}, maxattempts = 3, backoff = @backoff (atraso = 5000l, multiplicador = 2)) public void Call () lança a exceção {logger.info ("faça algo ..."); lançar nova BusinessException ("Exceção de chamada RPC"); } @Recover public void recover(BusinessException e) { logger.info(" ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 4. Escreva controlador
@RestController @RequestMapping ("/test") Public Class TestController {private Static Final Logger Logger = LoggerFactory.getLogger (testController.class); @Autowired Private RemoteService RemoteService; @RequestMapping ("/test") public String Login () lança a exceção {RemoteService.Call (); return string.valueof ("11"); } 5. Visite http: // localhost: 8080/teste/teste
6. Log de teste
2017-07-25 19:28:07 [info]-[http-nio-53602-exex-1]-[com.test.retry.service.remoteService.call (remoteservie.java:19)] faça algo ...
2017-07-25 19:28:12 [info]-[http-nio-53602-exex-1]-[com.test.retry.service.remoteService.call (remoteservie.java:19)] faça algo ...
2017-07-25 19:28:22 [info]-[http-nio-53602-exex-1]-[com.test.retry.service.remoteService.call (remoteservie.java:19)] faça algo ...
2017-07-25 19:28:22 [info]-[http-nio-53602-exex-1]-[com.test.retry.service.remoteService.recover (remoteservie.java:24)] ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2017-07-25 19:28:22 [info]-[http-nio-53602-exex-1]-[com.test.retry.service.remoteService.recover (remoteservie.java:25)] Exceção de chamada RPC
7. Instruções de configuração relacionadas
@Enableretry você pode tentar novamente ? Quando a propriedade ProxyTargetClass for verdadeira, use o proxy do CGLIB. As anotações Java padrão são usadas por padrão. Na bota da primavera, este parâmetro pode ser gravado na entrada do programa.
@Retryable O método de rotular esta anotação será repetido quando ocorrer uma exceção
Valor: especifique a classe de exceção a ser processada
Inclua: A classe de exceção especificada tratada é a mesma que o valor, e o padrão está vazio. Quando o exclusão também está vazio, todas as exceções são inadimplentes de ser tudo
exclua: especifique que as exceções não são processadas, o padrão está vazio, quando incluir também está vazio, padrão todas as exceções
Maxattempts: Número máximo de tentativas. Padrão 3 vezes
RECONTE: REPORTE A POLÍTICA DE ESPERANÇA. Use @backoff anotação por padrão
@Backoff Reparar a política de espera <r />
Defina o atraso, use o fixbackoffpolicy (especifique o tempo de espera) e tente o tempo de espera para ser preenchido novamente
Ao definir atraso e maxdea, tente novamente e aguarde a distribuição homogênea entre esses dois valores
Definir atraso, maxdealy e multiplicador, use exponencialbackofffpolicy (implementação do intervalo de tentativa exponencial).
O @Recover é usado para o método de repetição com falha do @REYABLE. Os parâmetros do método desta anotação devem ser uma exceção lançada pelo @Retryable, caso contrário, não será reconhecida. O processamento de log pode ser executado neste método.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.