我在2节点集群中使用infinispan 10.1.8运行spring boot应用程序。 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
)使我在两个节点之间发生异常通信,这是发生的情况:
formConfig
缓存的行为正常formConfig
缓存这时,相同的消息似乎在两个节点之间不断跳动:
mn-node1.company.acme-develop sending command to all: SingleRpcCommand{cacheName='formConfig', command=PutKeyValueCommand{key=SimpleKey [form_config,MECHANICAL,DESIGN,et,7850]
mn-node2.company.acme-develop received command from mn-node1.company.acme-develop: SingleRpcCommand{cacheName='formConfig', command=PutKeyValueCommand{key=SimpleKey [form_config,MECHANICAL,DESIGN,et,7850]
mn-node2.company.acme-develop sending command to all: SingleRpcCommand{cacheName='formConfig', command=PutKeyValueCommand{key=SimpleKey [form_config,MECHANICAL,DESIGN,et,7850]
mn-node1.company.acme-develop received command from mn-node2.company.acme-develop: SingleRpcCommand{cacheName='formConfig', command=PutKeyValueCommand{key=SimpleKey [form_config,MECHANICAL,DESIGN,et,7850],
其他一些事情:
formConfig
是唯一具有这种行为的缓存。所有其他REPL_ASYNC缓存均正常工作。我仅停用了formConfig缓存,系统正常运行。这里有更多complete log file,包括来自两个节点的日志。
其他信息:
我怀疑
答案 0 :(得分:1)
唯一可能发生这种情况的情况是SimpleKey
具有不同的hashCode()
。
日志中是否有例外?在对密钥进行序列化和反序列化之后,您是否可以检查hashCode()
是否相同?