Asynchronous 如果仅在网格的一个节点上发生错误,如何确保infinispan在所有其他节点上进行数据复制?

Asynchronous 如果仅在网格的一个节点上发生错误,如何确保infinispan在所有其他节点上进行数据复制?,asynchronous,transactions,infinispan,Asynchronous,Transactions,Infinispan,我目前正在使用infinispan,配置如下: 事务模式(乐观锁定-可重复读取) 网格中只有一个节点被分配来执行put/remove操作(以下称为master节点),其余所有网格节点只能执行read操作(以下称为read节点)。我的网格节点总数很低 同步应答模式 现在,我想知道如何更改infinispan配置,以便同时使用以下所有特性: 维护事务模式(乐观锁定-可重复读取) 仅维护一个主节点和所有其他作为读取节点的节点 异步应答模式 如果仅在一个读取节点X中发生数据复制错误(例如,ISPN000

我目前正在使用infinispan,配置如下:

  • 事务模式(乐观锁定-可重复读取)

  • 网格中只有一个节点被分配来执行put/remove操作(以下称为master节点),其余所有网格节点只能执行read操作(以下称为read节点)。我的网格节点总数很低

  • 同步应答模式

  • 现在,我想知道如何更改infinispan配置,以便同时使用以下所有特性:

  • 维护事务模式(乐观锁定-可重复读取)

  • 仅维护一个主节点和所有其他作为读取节点的节点

  • 异步应答模式

  • 如果仅在一个读取节点X中发生数据复制错误(例如,ISPN000220:从字节缓冲区取消编组远程命令时出现问题:java.io.InvalidObjectException:尝试读取具有无效ID的反向引用),可以确保在所有其他节点中正确复制数据,然后infinispan将在读取节点X上重试数据复制(一旦它被重新部署并出现固定错误)

  • 最后,我需要在主节点中截获与异步事务执行期间可能发生的错误相关的所有异常,以便将错误消息存储在专用的db表中。如何拦截这些异常

  • 非常感谢


    Francesco Sclano

    不需要在写入节点和读取节点之间进行分离,因为Infinispan已经在单个节点中获取锁,从而避免了死锁

    如果要跟踪失败,最好切换异步缓存API,并向通知未来添加侦听器,以了解操作何时完成或何时发生错误。这样,缓存的调用方就不必立即等待响应


    另外,如果切换到异步的原因是性能,那么您可能可以切换到分布式,随着向集群添加更多节点,分布式的扩展性更好,因为它只将数据复制到集群的一个子集。启用具有分发的一级缓存可确保仍执行读取。

    如果仅在一个读取节点X中发生数据复制错误(例如ISPN000220:从字节缓冲区取消编组远程命令时出现问题:java.io.invalidObject异常:尝试读取具有无效ID的反向引用),确保在所有其他节点中正确复制数据,然后infinispan将在读取节点X上重试数据复制(一旦以固定错误重新部署),为我的项目设计的网格拓扑预期只有一个节点能够写入。不幸的是,我必须使用复制的、事务性的同步缓存。那么,是否不可能获得4。使用复制事务同步缓存可以实现这一点,但重试必须由代码完成。