Skip to content

需求

hazelcast

hazelcast 在 spring boot 3 之后作为首推的分布式缓存技术, 可以很方便的实现分布式通信的目的

hazelcast

分布式计算/存储

  • 主节点订阅MQ,自动分发到其它节点进行写入
  • 主节点发起计算任务,远程调用计算节点计算方法,获取结果

分布式计算代码-公共模块

  1. 抽象任务接口, 计算节点实现此接口

    java
    public interface ITask extends Serializable {
        String call();
    }
  2. 查询任务,用于主节点发起任务

    java
    public 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";
    }
}