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

时间:2014-05-26 13:53:46

标签: asynchronous transactions infinispan

我目前正在使用带有以下配置的infinispan:

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

  2. 仅分配一个网格节点来执行放置/删除操作(以下称为主节点),并且所有剩余的网格节点只能执行读取操作(以下称为读取节点)。我的网格节点总数很少。

  3. 同步回复模式

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

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

    2. 只维护一个主节点,所有其他节点作为读取节点

    3. 异步回复模式

    4. 如果数据复制错误只发生在一个读取节点X中(例如ISPN000220:从字节缓冲区解组远程命令的问题:java.io.InvalidObjectException:尝试读取带有无效ID的反向引用),确保数据在所有其他节点中正确复制,然后在读取节点X上重新进行数据复制将是无限期的(一旦它以固定错误重新部署)

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

    6. 非常感谢

      Francesco Sclano

1 个答案:

答案 0 :(得分:0)

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

如果您想跟踪故障,最好切换异步缓存API并将监听器添加到通知的未来,以找出操作何时完成,或者发生错误。这样,缓存的调用者不必立即等待响应。

此外,如果切换到异步的原因是性能,也许您可​​以切换到分发,当您向群集添加更多节点时,分发会更好地扩展,因为它只将数据复制到群集的子集。使用分发启用L1缓存可确保读取仍然具有高效性。