Infinispan 集群 REPL_ASYNC 缓存:命令在两个节点之间无限期地反弹

Infinispan clustered REPL_ASYNC cache: command indefinitely bounced between two nodes

Im 运行 spring 在 2 节点集群中使用 infinispan 10.1.8 启动应用程序。 2 个节点通过 jgroups TCP 进行通信。我配置了几个REPL_ASYNC.

问题: 其中一个缓存在某些时候导致两个节点一遍又一遍地交换相同的消息,从而导致高 CPU 和内存使用率。停止这种情况的唯一方法是停止两个节点之一。

更多细节,这里是配置。

 org.infinispan.configuration.cache.Configuration replAsyncNoExpirationConfiguration = new ConfigurationBuilder()
                .clustering()
                    .cacheMode(CacheMode.REPL_ASYNC)
                .transaction()
                    .lockingMode(LockingMode.OPTIMISTIC)
                .transactionMode(TransactionMode.NON_TRANSACTIONAL)
                .statistics().enabled(cacheInfo.isStatsEnabled())
                .locking()
                    .concurrencyLevel(32)
                    .lockAcquisitionTimeout(15, TimeUnit.SECONDS)
                    .isolationLevel(IsolationLevel.READ_COMMITTED)
                .expiration()
                    .lifespan(-1) //entries do not expire
                    .maxIdle(-1) // even when they are idle for some time
                    .wakeUpInterval(-1) // disable the periodic eviction process
                .build();

其中一个缓存(名为 formConfig)导致我在两个节点之间通信异常,这是发生了什么:

  1. 我使用 jmeter 生成仅针对节点 1 的流量负载
  2. 有一段时间节点 2 通过 SingleRpcCommand 从节点 1 接收缓存条目,没有异常,甚至 formConfig 缓存行为正常
  3. 一段时间后,一个新的缓存条目被发送到 formConfig 缓存

此时,同一条消息似乎一直在两个节点之间跳动:

其他一些事情:

这里有更多 complete log file 包括来自两个节点的日志。

其他信息:

我怀疑

唯一可能发生这种情况的情况是 SimpleKey 具有不同的 hashCode()

日志中是否有任何异常?在密钥的序列化和反序列化之后,您能否检查 hashCode() 是否相同?