gpt4 book ai didi

replication - Ehcache 复制缓存在启动时不同步

转载 作者:行者123 更新时间:2023-12-01 01:08:27 25 4
gpt4 key购买 nike

我有一个在两台机器上复制的 ehcache 缓存。一旦两个对等体都启动,对等体正确地找到彼此并进行复制。但是,如果第一个对等点首先启动,并接收到几个元素,然后第二个对等点稍后启动……第二个对等点永远不会看到在它还没有事件时添加的元素。

这是确切的顺序:

  • 缓存 A 启动
  • 将“1234”添加到缓存 A
  • 缓存 B 启动
  • 从缓存 B 中获取“1234”-> 未找到

  • 我的期望:如果复制了 2 个缓存,则获取现有元素会为任一缓存返回相同的值。

    我的缓存元素只是原始字符串/整数类型。

    GitHub 中的示例如下: https://github.com/HamletDRC/EhcachePOC

    Ehcache 配置在这里: https://github.com/HamletDRC/EhcachePOC/tree/master/src/main/resources

    在示例项目中,为 ehcache 类启用了 log4j,以便您可以看到对等点确实找到了彼此并进行了复制,但只有自对等组启动以来添加的元素,而不是以前存在的元素。

    您只需要安装 JDK 和 Maven 即可构建它。

    重现:
  • 运行 ReplicatedCacheWriter
  • 等待 6 秒让作者创建元素 [1, 2, 3, 4, 5, 6]
  • 运行 ReplicatedCacheListener
  • 监听器找到所有在它活跃之后“放置”的元素,但在它活跃之前没有“放置”元素。

  • 这是ehcache.xml
    <cacheManagerPeerProviderFactory
    class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
    properties="peerDiscovery=automatic, multicastGroupAddress=231.0.0.1,
    multicastGroupPort=4446, timeToLive=32"/>

    <cacheManagerPeerListenerFactory
    class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
    properties="port=40002, socketTimeoutMillis=2000"/>

    ...
    <cacheEventListenerFactory
    class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
    properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,
    replicateUpdatesViaCopy=false, replicateRemovals=true "/>

    (很明显,两个节点的监听端口是不一样的)

    如何让缓存在启动时同步?

    最佳答案

    您需要一个 bootstrapCacheLoaderFactory在您的 ehcache_listener.xml .例如:

    <cache name="myCache" ...>
    ...
    <bootstrapCacheLoaderFactory
    class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
    properties="bootstrapAsynchronously=true"
    propertySeparator="," />
    </cache>

    关于replication - Ehcache 复制缓存在启动时不同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16844455/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com