Hazelcast 分布式地图处理器在单个节点上执行

Hazelcast distributed map processor execution on a single node

我在 Spring 支持高可用性的引导 MVC 应用程序中使用 Hazelcast,它有 4 个相同逻辑的实例,运行 作为主动-主动。 所有 4 个共享一个分布式对象图。

作为用户操作(访问特定控制器)的结果,我在共享地图上触发了一个 EntryProcessor (map.submitToKey)。我认为这样的操作只会在单个节点上 运行 处理器一次,但是所有 4 个节点 运行 同时使用相同的处理器。

是否有在单个节点上执行分布式地图的 EntryProcessor 的选项?

如果您的地图不需要任何备份,那么 EntryProcessor 可以安全地 return null 来自 getBackupProcessor()。当returned null时,备份节点不会执行任何EntryBackupProcessor.

否则,如果您为地图配置了备份,但为 EntryBackupProcessor 配置了 return null,则条目将不会复制到备份节点。它将被视为没有为地图配置备份。主备最终会变得不一致。当主要崩溃时,您将丢失 EntryProcessor.

完成的更新

在这种情况下,如果你需要备份,你可以写一个自定义的EntryBackupProcessor,它可以只复制主EntryProcessor的执行结果,而不是执行EntryProcessor的逻辑。例如:

class CustomEntryBackupProcessor implements EntryBackupProcessor {

    private Object resultOfEntryProcessor;

    @Override
    public void processBackup(Map.Entry entry) {
        entry.setValue(resultOfEntryProcessor);            
    }
}