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);
}
}
我在 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);
}
}