class Soldier {
String serioNo;
String serioId;
CompletableFuture<Map<String, Object>> future;
}
LinkedBlockingQueue queue = new LinkedBlockingQueue<>();
@DS(value = “${spring.datasource1}”)
@Override
public Map<String, Object> getInfo(String id) throws ExecutionException, InterruptedException {
String serioNo = UUID.randomUUID().toString();
Soldier soldier = new Soldier();
soldier.serioId = id;
soldier.serioNo = serioNo;
CompletableFuture<Map<String, Object>> future = new CompletableFuture<>();
soldier.future = future;
queue.add(soldier);
return future.get();
}
/**
-
定时任务
*/
@PostConstruct
public void init() {
ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(1);
scheduled.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
int size = queue.size();
if (size == 0) {
return;
}
List list = new ArrayList<>();
List<Map<String, String>> param = new ArrayList<>();
// 根据获取的list封装成请求对象
for (int i = 0; i < size; i++) {
Soldier soldier = queue.poll();
Map<String, String> map = new HashMap<>();
map.put(“serialNo”, soldier.serioNo);
map.put(“serioId”, soldier.serioId);
param.add(map);
list.add(soldier);
}
System.out.println(“处理数量:” + size);
// 批量请求
List<Map<String, Object>> responses = carBookService.queryInfoBatch(param);
for (Soldier soldier : list) {
String serioNo = soldier.serioNo;
for (Map<String, Object> response : responses) {
String serialNoRes = response.get(“serialNo”).toString();
if (serioNo.equals(serialNoRes)) {
soldier.future.complete(response);
}
}
}}
}, 0, 10, TimeUnit.MILLISECONDS);
}