首页 文章

Infinispan Clustering:由CacheLoader加载的条目的复制

提问于
浏览
2

对不起,文字墙;底部有一个摘要 .

我正在为将在多个服务器上运行的Java应用程序进行原型设计 . 每个实例都有一个嵌入式Infinispan缓存,并且缓存配置为在复制模式下形成集群 . 缓存条目仅从外部系统加载 - 无需使用 cache.put(key, value) 主动添加条目 .

为此,我实现了一个自定义CacheLoader . 按需加载值正在运行,但这些条目不会复制到其他活动集群节点 . 出于测试原因,我尝试使用'put'添加条目 - 这些条目会立即复制 .

用户指南向我指出了在节点加入/离开集群时或在写入期间影响集群行为的属性,如fetchPersistentState,shared和fetchInMemoryState . 后者在我的情况下很有用,因为加入集群的新节点应该接收当前状态 . 启动期间的初始同步甚至可以获取缓存加载器加载的条目 .

fetchPersistentState导致错误,因为我的缓存加载器没有实现AdvancedCacheLoader - 但是因为在调用_1187349之后似乎没有调用高级方法,所以我认为正确实现该接口不会解决我的问题 .

我还阅读了有关ClusterLoader实现的内容

咨询集群中的其他成员以获取 Value

但是到其他节点的往返会增加处理请求时的响应时间 .

尝试一次加载该值的理由是,对共享外部系统的调用被认为是相当昂贵的,因此复制消息所产生的增加的集群开销应该比在每个节点上加载值的问题更少 .

为了获得某种孤立的测试和代码示例,我在Github上分配了infinispan-quickstart / clustered-cache示例并根据我的需要进行了调整:

https://github.com/flpa/infinispan-quickstart/tree/master/clustered-cache

缓存现在由CacheLoader支持,并且节点定期获取/放置值以演示如何复制'put'值,但是从加载器获取的值不是 .

To sum this up:

是否可以在复制模式下配置Infinispan集群,该模式完全由缓存加载器查找填充,并在所有节点上复制这些查找的结果?

EDIT: I accidentally deleted the Github fork, so I recreated it from scratch including only the relevant 'clustered-cache' folder and adapted the link above.

1 回答

  • 3

    我担心开箱即用的配置选项不可用 . 但是,您可以在每个节点上为 @CacheEntryLoaded 事件注册侦听器,并在此侦听器中执行 putAsync() . 请务必包含标志 SKIP_CACHE_LOADSKIP_CACHE_STOREIGNORE_RETURN_VALUES 以获得最佳性能 .

相关问题