Ehcache jgroups方式同步缓存出现问题总结

本文详细介绍了如何通过调整Ehcache配置文件中的几个关键参数来解决启动时出现的缓存同步错误,并实现了有效的缓存同步功能。通过修改`start_port`为`bind_port`和引入`jgroups_tcp.xml`文件来配置JGroups通道,成功解决了Ehcache配置错误的问题。同时,提供了解决方法的官方链接,以便读者进一步查阅。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ehcache配置文件按官网配置如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <ehcache>
 3 
 4     <diskStore path="java.io.tmpdir" />    
 5                     
 6         <cacheManagerPeerProviderFactory
 7             class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
 8             properties="connect=TCP(start_port=7777):
 9                TCPPING(initial_hosts=133.96.93.111[7777],133.96.93.105[7777];port_range=10;timeout=3000;
10                num_initial_members=3;up_thread=true;down_thread=true):
11                VERIFY_SUSPECT(timeout=1500;down_thread=false;up_thread=false):
12                pbcast.NAKACK(down_thread=true;up_thread=true;gc_lag=100;retransmit_timeout=3000):
13                pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;
14                print_local_addr=false;down_thread=true;up_thread=true)"
15         propertySeparator="::" />
16             
17     <defaultCache maxElementsInMemory="10000" overflowToDisk="false"
18         eternal="false" memoryStoreEvictionPolicy="LRU"
19         maxElementsOnDisk="10000000" diskExpiryThreadIntervalSeconds="600"
20         timeToIdleSeconds="3600" timeToLiveSeconds="100000"
21         diskPersistent="false" />
22     
23     <cache name="AutoAssignUsers" maxElementsInMemory="10000" eternal="true"
24         overflowToDisk="false" timeToIdleSeconds="1" timeToLiveSeconds="600"
25         memoryStoreEvictionPolicy="LRU">
26     <cacheEventListenerFactory
27         class="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"
28         properties="replicateAsynchronously=true, replicatePuts=true, replicateUpdates=true,
29         replicateUpdatesViaCopy=true, replicateRemovals=true "/>
30     </cache>
31         
32 </ehcache>

按官网配置后启动报错:

 [net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProvider] (main) Failed to create JGroups Channel, replication will not function.
 
 org.jgroups.ChannelException: unable to setup the protocol stack
     at org.jgroups.JChannel.init(JChannel.java:1703)
     at org.jgroups.JChannel.<init>(JChannel.java:246)
     at org.jgroups.JChannel.<init>(JChannel.java:229)
     at net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProvider.init(JGroupsCacheManagerPeerProvider.java:127)
     at net.sf.ehcache.CacheManager.init(CacheManager.java:328)
     at net.sf.ehcache.CacheManager.<init>(CacheManager.java:226)
     at net.sf.ehcache.CacheManager.create(CacheManager.java:690)
 Caused by: java.lang.IllegalArgumentException: start_port cannot be set to 0, as no dynamic discovery protocol (e.g. MPING or TCPGOSSIP) has been detected.
     at org.jgroups.protocols.BasicTCP.init(BasicTCP.java:90)
     at org.jgroups.stack.ProtocolStack.initProtocolStack(ProtocolStack.java:705)
     at org.jgroups.stack.ProtocolStack.setup(ProtocolStack.java:457)
     at org.jgroups.JChannel.init(JChannel.java:1699)

之后google找到解决方法:

①将

start_port=7800 改为 bind_port=7800

<cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
            properties="connect=TCP(bind_port=7777):
               TCPPING(initial_hosts=133.96.93.111[7777],133.96.93.105[7777];port_range=10;timeout=3000;
               num_initial_members=3;up_thread=true;down_thread=true):
               VERIFY_SUSPECT(timeout=1500;down_thread=false;up_thread=false):
               pbcast.NAKACK(down_thread=true;up_thread=true;gc_lag=100;retransmit_timeout=3000):
               pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;
               print_local_addr=false;down_thread=true;up_thread=true)"
        propertySeparator="::" />

cacheManagerPeerProviderFactory 中properties的属性改为文件引用如下:

 

<cacheManagerPeerProviderFactory
            class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
            properties="jgroups_tcp.xml" />

 

jgroups_tcp.xml :

<?xml version='1.0'?>
 <config>
     <TCP start_port="7777" />
     <TCPPING timeout="3000"
              initial_hosts="139.99.93.111[7777],139.99.93.105[7777]"
              port_range="10"
              num_initial_members="3"/>
     <VERIFY_SUSPECT timeout="1500"  />
     <pbcast.NAKACK use_mcast_xmit="false" gc_lag="100"
                    retransmit_timeout="300,600,1200,2400,4800"
                    discard_delivered_msgs="true"/>
     <pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000" max_bytes="400000"/>
     <pbcast.GMS print_local_addr="true" join_timeout="5000" shun="false" view_bundling="true"/>
 </config>

我试了第一种方法可以缓存同步,第二种没试,但是解决方法中有,可以试试

给出原地址:http://forums.terracotta.org/forums/posts/list/4660.page

 

 

转载于:https://www.cnblogs.com/luoyanli/p/3717878.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值