我在Spring应用程序中使用了Hazelcast,它支持高可用性,它有4个相同逻辑的实例,它们作为活动活动运行。所有4个都共享一个分布式对象映射。
由于用户操作(对特定控制器的访问),我在共享地图上触发一个EntryProcessor (map.submitToKey)。我认为这样的操作只会在单个节点上运行处理器一次,但是所有4个节点都会同时运行同一处理器。
是否有选项可以在单个节点上执行分布式映射的EntryProcessor?
发布于 2018-10-02 14:30:41
如果您的地图不需要任何备份,那么EntryProcessor可以安全地从getBackupProcessor()返回null。当返回null时,备份节点将不会执行任何EntryBackupProcessor。
否则,如果为map配置了备份,但返回了EntryBackupProcessor的EntryBackupProcessor,则条目将不会复制到备份节点。它将被视为没有为map配置的备份。主备份和备份最终将变得不一致。当主崩溃时,您将失去EntryProcessor所做的更新。
在这种情况下,如果需要备份,可以编写一个自定义EntryBackupProcessor,它可以复制主EntryProcessor的执行结果,而不是执行EntryProcessor的逻辑。
class CustomEntryBackupProcessor implements EntryBackupProcessor {
private Object resultOfEntryProcessor;
@Override
public void processBackup(Map.Entry entry) {
entry.setValue(resultOfEntryProcessor);
}
}https://stackoverflow.com/questions/52606016
复制相似问题