Ehcache分布式多通道

4

我正在使用分布式模式的ehcache。 缓存是通过通道同步的。

<cacheManagerPeerProviderFactory
    class="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory"
    properties="channelName=CHANNEL1:connect=UDP(mcast_port=45568)"
    propertySeparator=":" />

我有一个新需求,需要与两个通道进行同步:CHANNEL1和CHANNEL2。

这是否可行?如果是,我该如何做?

提前感谢。

1个回答

1
通常,一个cacheManagerPeerProviderFactory实例用于在集群中复制(或同步)多个缓存。在这种情况下,“channelName = CHANNEL1:”更像是简单地给出一个名称。我不认为ehCache支持多个通道。
如果您的要求是具有某些复制特定的一个通道,则可以尝试以下之一:
- 在同一应用程序中运行两个EhCache Managers,每个都有自己的ehcache.xml,一个用于特定的复制逻辑,另一个用于缓存的常规复制逻辑。 - 您只会有一个缓存管理器,但是您的ehcache.xml将以一种方式变化,即您不会在第三个应用程序中包含需要特定复制逻辑的缓存。
第一个方法更加简洁。您可以按以下方式使用Spring拥有多个EhcacheManagers。
<ehcache:annotation-driven cache-manager="ehCacheManager1" />

<bean id="ehCacheManager1" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:ehcache-1.xml" />
</bean>

<bean id="ehCacheManager2" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:ehcache-2.xml" />
</bean>

我需要保留CHANNEL1和CHANNEL2,因为某些同步必须仅针对一个通道执行。 - Nabil
如果您想要针对一个频道进行一些特定的复制,那么当您说“我需要与两个频道同步:CHANNEL1和CHANNEL2”时,如何同时复制这两个频道?您是指除了某些缓存之外全部复制吗?能否给出确切的用例?您可以这样做,将一个频道保留为通用内容,而另外两个频道(channel1和channel2)则专门针对它们! - Pratap Koritala
我在Websphere集群中部署了3个应用程序,分别是A1、A2和A3。实际情况是每个应用程序都有一个分布式EHcache,并且使用CHANNEL通过Jgroup进行同步。现在,我有一个新的缓存必须由这3个应用程序共享。因此,我需要仅为单个应用程序保持现有缓存同步,并且新缓存必须跨应用程序同步。我们该如何做到这一点? - Nabil
我的问题是关于如何在技术上实现这一点的,我没有找到任何方法在ehcache.xml文件中做你所说的事情。 - Nabil
这个不起作用,我实现了它并且收到了这样的消息:WARN UDP用户:Ip:- JGRP000012:从不同的集群CHANNEL3(我们的集群是CHANNEL1)丢弃消息。发送者是xxxxxx。 - Nabil
问题在于两个通道具有相同的多播端口,如果您使用不同的值,则一切都可以正常工作,谢谢。 - Nabil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接