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

时间:2018-10-02 09:55:30

标签: java spring spring-boot cluster-computing hazelcast

我在支持高可用性的Spring Boot MVC应用程序中使用Hazelcast,它具有4个具有相同逻辑的实例,这些实例以双活模式运行。 这4个对象全部共享一个分布式对象图。

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

是否可以在单个节点上执行分布式地图的EntryProcessor?

1 个答案:

答案 0 :(得分:1)

如果您的地图不需要任何备份,那么EntryProcessor可以从getBackupProcessor()安全地返回null。返回null后,备份节点将不执行任何EntryBackupProcessor

否则,如果您为地图配置了备份,但为EntryBackupProcessor返回了null,则条目将不会复制到备份节点。它将视为没有为地图配置任何备份。主数据库和备份数据库最终将变得不一致。当主服务器崩溃时,您将丢失由EntryProcessor完成的更新。

在这种情况下,如果需要备份,则可以编写自定义EntryBackupProcessor,该自定义文件EntryProcessor可以仅复制主EntryProcessor的执行结果,而不必执行class CustomEntryBackupProcessor implements EntryBackupProcessor { private Object resultOfEntryProcessor; @Override public void processBackup(Map.Entry entry) { entry.setValue(resultOfEntryProcessor); } } 逻辑。例如:

class Recipe
    include HTTParty

    key_value = ENV['FOOD2FORK_KEY'] || 'YOUR_API_KEY_HERE'

    base_uri "http://food2fork.com/api"
    default_params key: key_value
    default_options.update(verify: false)
    format :json

    def self.for(search_string)
        get('/search', { query: { q: search_string}})["recipes"]
    end
end
相关问题