appfabric缓存中正在接收重复通知

时间:2013-07-11 06:49:08

标签: caching notifications duplicates appfabric

我正在为appfabric缓存配置通知。第一个添加操作是发送一个通知。但是当我用新值替换(更新)相同的缓存项或删除该项时,我收到多个通知用于该单个操作。我怀疑它与我执行的操作类型无关。因为我也看过多个添加通知。有什么配置我搞砸了? 我已经在我的代码库文件中编写了委托。即使是单次操作,它也会持续一段时间。

我的配置是:

<dataCacheClient requestTimeout="150000" channelOpenTimeout="19000" maxConnectionsToServer="10">
    <localCache isEnabled="true" sync="TimeoutBased" ttlValue="300" objectCount="10000"/>
    <clientNotification pollInterval="30" maxQueueLength="10000" />
    <hosts>
        <host name="192.10.14.20" cachePort="22233"/>

    </hosts>
    <securityProperties mode="None" protectionLevel="None" />
    <transportProperties connectionBufferSize="131072" maxBufferPoolSize="268435456"
                         maxBufferSize="8388608" maxOutputDelay="2" channelInitializationTimeout="60000"
                         receiveTimeout="600000"/>
</dataCacheClient>

我的代表是代表:

  public void myCacheLvlDelegate(string myCacheName, string myRegion, string myKey, DataCacheItemVersion itemVersion, DataCacheOperations OperationId, DataCacheNotificationDescriptor nd)
    {
        //display some of the delegate parameters
        StringBuilder ResponseOfCache = new StringBuilder("A cache-level notification was triggered!");
        ResponseOfCache.Append("   ; Cache: " + myCacheName);
        ResponseOfCache.Append("   ; Region: " + myRegion);
        ResponseOfCache.Append("   ; Key: " + myKey);
        ResponseOfCache.Append("   ; Operation: " + OperationId.ToString());
        string value = ManualDataCacheOperations.GetCacheValue(myTestCache, txtKey.Text).ToString();
        Legend.Append(string.Format("{0} - Operation {1} Performed at {2}{3}", myKey, OperationId.ToString(), DateTime.Now.ToShortTimeString(), Environment.NewLine));

    }

请告诉我在哪里错过了?为什么要为同一个项目发送多个通知。如果它有用,我使用的是具有两个主机的群集。并使用相同的缓存进行会话管理。

1 个答案:

答案 0 :(得分:0)

首先,请确保您只添加了一个回调。这很简单,但我看到太多的情况下添加了多个回调。

了解缓存通知基于轮询非常重要。

当您使用缓存通知时,您的应用程序会定期检查缓存群集(pollInterval),以查看是否有任何新通知可用。

因此,如果您在两次检查之间更新密钥10次,则会收到10次通知。