spring-retry技术是spring框架中的调用重试技术实现,通过retry技术,可以对当前调用失败的请求重新发起重试机制,重试成功即返回,若继续失败,是否再次重试依代码配置决定。
示例工程
示例中,使用三个工程
- eureka注册中心
- retry-client 消费方,发起请求调用
- retry-server 服务方,提供服务
retry-client工程
代码结构
其中 RetryClientApplication.java 为工程启动类
Controller.java 请求入口类
@RestController
public class Controller {
@Autowired
private HelloService helloService;
@GetMapping("/hello")
public String hello() {
return helloService.hello();
}
}
HelloService.java 服务实现类
@EnableFeignClients("com.retry.feign")
@Service
public class HelloService {
@Autowired
FeignService feignService;
public String hello() {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("调用远程服务开始:" + df.format(new Date()));
return feignService.hello();
}
}
FeignService.java 外调feign接口类
@FeignClient("retry-server")
public interface FeignService {
@GetMapping("/hi")
String hello();
}
其中调用关系,Controller -> HelloService -> FeignService
retry-server工程
其中 RetryServerApplication.java 为工程启动类
HiController.java 为请求入口,实现一个hello方法
@RestController
public class HiController {
@GetMapping("/hi")
public String hello() {
return "I am feign-provider";
}
}
依次启动注册中心,retry-client和retry-server,在浏览器输入 http://localhost:5000/hello 可以正常请求到retry-server提供的服务
改造注解说明
retry重试改造时,对要发起重试的客户端工程进行改造,对应到上面的例子,就是retry-client工程,retry-server工程为服务提供方,不须要改造。
增加pom.xml依赖