You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

主备服务器及Spring Boot REST API集群数据同步轻量方案咨询

需求实现方案说明

你提到的三个组件中,Atomix、Hazelcast均可满足无独立中间件、内嵌到Spring Boot API、集群数据同步+广播的需求,ZooKeeper需要独立部署集群,不属于轻量内嵌方案,不推荐使用。


1. Hazelcast 实现示例(更推荐,生态更成熟)

Hazelcast是嵌入式内存网格,无需额外部署服务,集成后集群节点自动发现,原生支持分布式数据结构、节点广播、数据自动同步。

1.1 引入依赖

<!-- pom.xml 依赖 -->
<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast</artifactId>
    <version>5.3.2</version>
</dependency>
<dependency>
    <groupId>com.hazelcast</groupId>
    <artifactId>hazelcast-spring</artifactId>
    <version>5.3.2</version>
</dependency>

1.2 Hazelcast配置类

@Configuration
public class HazelcastConfig {
    @Bean
    public HazelcastInstance hazelcastInstance() {
        Config config = new Config();
        // 集群名称,同一集群的节点名称必须一致
        config.setClusterName("api-sync-cluster");
        // 自动发现同网段下的集群节点
        config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(true);
        // 配置分布式Map,用于跨节点同步数据,自动备份到其他节点
        MapConfig mapConfig = new MapConfig("sync-data-map");
        mapConfig.setBackupCount(1); // 每个数据备份1份到其他节点,实现主备同步
        config.addMapConfig(mapConfig);
        return Hazelcast.newHazelcastInstance(config);
    }
}

1.3 数据同步与广播功能实现

@Service
public class ClusterSyncService {
    private final HazelcastInstance hazelcastInstance;
    // 分布式Map,所有节点数据自动同步
    private final IMap<String, Object> syncDataMap;
    // 广播主题,所有节点都能收到消息
    private final ITopic<Object> broadcastTopic;

    public ClusterSyncService(HazelcastInstance hazelcastInstance) {
        this.hazelcastInstance = hazelcastInstance;
        this.syncDataMap = hazelcastInstance.getMap("sync-data-map");
        this.broadcastTopic = hazelcastInstance.getTopic("broadcast-topic");
        // 注册广播消息监听器,本节点收到其他节点的广播消息时触发
        broadcastTopic.addMessageListener(message -> {
            Object msgContent = message.getMessageObject();
            // 自定义处理接收到的广播消息逻辑
            System.out.println("收到集群广播消息:" + msgContent);
        });
    }

    // 写入同步数据,自动同步到所有集群节点
    public void putSyncData(String key, Object value) {
        syncDataMap.put(key, value);
    }

    // 读取同步数据
    public Object getSyncData(String key) {
        return syncDataMap.get(key);
    }

    // 向所有集群节点广播消息
    public void broadcastMsg(Object msg) {
        broadcastTopic.publish(msg);
    }

    // 周期性同步任务,配合Spring @Scheduled使用
    @Scheduled(fixedRate = 30000) // 每30秒执行一次全量同步校验
    public void periodicSync() {
        // 自定义周期性同步逻辑,比如校验本地数据和分布式Map数据一致性
        syncDataMap.forEach((k, v) -> {
            // 本地数据校验更新逻辑
        });
    }
}

2. Atomix 实现示例

Atomix是嵌入式分布式系统框架,同样支持无外部依赖的内嵌部署,提供强一致的分布式数据结构和消息广播能力。

2.1 引入依赖

<dependency>
    <groupId>io.atomix</groupId>
    <artifactId>atomix-core</artifactId>
    <version>3.1.12</version>
</dependency>

2.2 Atomix配置与启动

@Configuration
public class AtomixConfig {
    @Bean(destroyMethod = "stop")
    public Atomix atomixInstance() {
        return Atomix.builder()
                .withClusterId("api-sync-cluster")
                .withMemberId("node-" + UUID.randomUUID())
                .withAddress(new Address("0.0.0.0", 5679))
                .withMulticastDiscovery() // 多播自动发现节点
                .build()
                .start()
                .join();
    }
}

2.3 功能实现

@Service
public class AtomixSyncService {
    private final Atomix atomix;
    private final DistributedMap<String, Object> syncMap;
    private final DistributedTopic<Object> broadcastTopic;

    public AtomixSyncService(Atomix atomix) {
        this.atomix = atomix;
        this.syncMap = atomix.<String, Object>mapBuilder("sync-data-map")
                .withReplicationFactor(2)
                .build()
                .join();
        this.broadcastTopic = atomix.<Object>topicBuilder("broadcast-topic")
                .build()
                .join();
        // 监听广播消息
        broadcastTopic.subscribe(msg -> {
            System.out.println("收到广播消息:" + msg);
        });
    }

    // 写入同步数据
    public void putSyncData(String key, Object value) {
        syncMap.put(key, value).join();
    }

    // 广播消息
    public void broadcast(Object msg) {
        broadcastTopic.publish(msg).join();
    }
}

内容的提问来源于stack exchange,提问作者laxman mva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 10:09:03