【问题标题】:Ehcache Distributed Multiple channelEhcache 分布式多通道
【发布时间】:2015-05-14 17:22:15
【问题描述】:

我在分布式模式下使用 ehcache。 缓存由 channel 同步。

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

对于一个新要求,我需要与两个频道同步:CHANNEL1 和 CHANNEL2。

这可能吗?如果是的话,我该怎么做?

提前致谢

【问题讨论】:

    标签: java spring caching ehcache


    【解决方案1】:

    通常,cacheManagerPeerProviderFactory 的一个实例用于跨集群复制(或同步)多个缓存。在这种情况下,"channelName=CHANNEL1:" 更像是简单地给出一个名字。我不认为ehCache支持多渠道。

    如果您要求有一些特定于复制的通道,您可以尝试以下方法之一

    • 在同一个应用程序中运行两个 EhCache 管理器,每个管理器都有 ehcache.xml,一个用于特定的复制逻辑,一个用于缓存的通用复制逻辑。
    • 您将只有一个缓存管理器,但您的 ehcache.xml 会有所不同,您不会在第三个应用程序中包含缓存(需要特定的复制逻辑)。

    第一个是更清洁的方法。 您可以通过以下方式使用 Spring 拥有多个 EhcacheManager,

    <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,因为必须为一个通道进行一些同步
    • 如果您想要一些特定于一个通道的复制,然后当您说“我需要与两个通道同步:CHANNEL1 和 CHANNEL2”时,您如何复制两个通道,您的意思是复制所有除了一些缓存?你能给出确切的用例吗?您可以这样做,为常见事物保留一个频道,另外两个(频道 1 和频道 2)专用于它们!!!
    • 我在 Websphere 集群中部署了 3 个应用程序。 A1、A2 和 A3。实际情况是每个应用程序都有一个分布式 EHcache,并且同步是使用 CHANNEL 与 Jgroup 完成的。现在我有一个必须由 3 个应用程序共享的新缓存。所以我只需要为单个应用程序保持我现有的缓存同步,并且新的缓存必须是跨应用程序同步的。我们怎样才能做到这一点?
    • 我的问题是关于你在技术上是如何做到这一点的,我没有找到任何方法来完成你在 ehcache.xml 文件中所说的内容
    • 这是行不通的,我实现了这个,我得到了这个消息:WARN UDP User: Ip: - JGRP000012: 从不同的集群 CHANNEL3 丢弃的消息(我们的集群是 CHANNEL1)。发件人是 xxxxxx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2016-11-21
    • 1970-01-01
    • 2017-07-24
    • 2016-03-25
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多