最近设计一个对外接口调用失败重试补推功能,因为对于很多接口的调用我准备采取策略模式去实现。思考了下,如果使用普通的策略模式,一个接口对应对个实现类,如果多一个类型的接口,那么就会多一个实现类,决定使用枚举策略模式。
失败接口实体
调用接口失败,将失败的调用的url,param,method等信息作为一条记录存入数据库中
public class HttpFailEntity {
.
.
.
private Integer apiType;
private String url;
private String param;
.
.
.
}
复制代码
定时器补推
通过定时器从库中获取调用外部接口失败的数据
List<HttpFailEntity> httpFailEntities;
//补推
httpFailEntities.forEach(httpFailEntity -> {
PushHttpFailEnum.valueOf(httpFailEntity.getApiType()).push(httpFailEntity);
});
复制代码
策略模式处理
使用枚举策略处理,避免多一个接口处理,新增一个实现类
public enum PushHttpFailEnum {
/**
* id -> 业务接口