需求
- 海量的设备数据,每秒写入大量磁盘文件 参考 202407-Parquet文件存储.md
- 并发查询压力较高
hazelcast
hazelcast 在 spring boot 3
之后作为首推的分布式缓存技术, 可以很方便的实现分布式通信的目的
分布式计算/存储
- 主节点订阅MQ,自动分发到其它节点进行写入
- 主节点发起计算任务,远程调用计算节点计算方法,获取结果
分布式计算代码-公共模块
抽象任务接口, 计算节点实现此接口
javapublic interface ITask extends Serializable { String call(); }
查询任务,用于主节点发起任务
javapublic class TaskCallable implements Callable<String>, Serializable { @Override public String call() { ITask task = SpringUtil.getApplicationContext().getBean(ITask.class);// 通过 Spring 上下文获取 TaskInterface 的 Bean return task.call(); } }
分布式计算-主节点
java
private final HazelcastInstance myHazelcastInstance;
@GetMapping("/test")
@SneakyThrows
public Object test() {
IExecutorService executorService = myHazelcastInstance.getExecutorService("default");
List<Future<String>> futures = new ArrayList<>();
for (Member member : myHazelcastInstance.getCluster().getMembers()) { // 向 其它 节点发起计算任务
if (!member.localMember()) {
futures.add(executorService.submitToMember(new TaskCallable(), member));
}
}
List<String> results = new ArrayList<>();
for (Future<String> future : futures) {
results.add(future.get());
}
return results;
}
分布式计算-计算节点
java
@Component
public class MyTask implements ITask {
@Override
public String call() {
return "my task";
}
}