下面是一个Java回调接口示例,它包括了限流、参数校验、日志记录和超时处理:
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
public interface Callback<T> {
void onSuccess(T result);
void onError(Exception e);
// 添加超时处理方法
default void onTimeout() {
System.err.println("操作超时");
}
}
public class ExampleService {
private static final Logger LOGGER = Logger.getLogger(ExampleService.class.getName());
private static final int MAX_REQUESTS_PER_SECOND = 100;
private static final long TIMEOUT_MS = 5000; // 5秒超时
public void performOperation(String param1, int param2, Callback<String> callback) {
// 参数校验
if (param1 == null || param1.isEmpty()) {
callback.onError(new IllegalArgumentException("参数param1不能为空"));
return;
}
if (param2 <= 0) {
callback.onError(new IllegalArgumentException("参数param2必须大于0"));
return;
}
// 日志记录
LOGGER.info("执行操作,参数param1: " + param1 + ", 参数param2: " + param2);
// 限流
if (isRateLimited()) {
callback.onError(new RuntimeException("请求过于频繁,请稍后重试"));
return;
}
// 模拟操作
try {
TimeUnit.MILLISECONDS.sleep(2000); // 模拟耗时操作
// 检查是否超时
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() - startTime < TIMEOUT_MS) {
// 模拟操作成功
String result = "操作成功";
callback.onSuccess(result);
return;
}
// 超时处理
callback.onTimeout();
} catch (InterruptedException e) {
callback.onError(e);
}
}
// 限流方法
private boolean isRateLimited() {
// 实现限流逻辑,这里简单地返回false表示不限流
return false;
}
}
public class Main {
public static void main(String[] args) {
ExampleService exampleService = new ExampleService();
exampleService.performOperation("param1", 10, new Callback<String>() {
@Override
public void onSuccess(String result) {
System.out.println("操作成功: " + result);
}
@Override
public void onError(Exception e) {
System.err.println("操作失败: " + e.getMessage());
}
@Override
public void onTimeout() {
System.err.println("操作超时");
}
});
}
}