我正在为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));
}
请告诉我在哪里错过了?为什么要为同一个项目发送多个通知。如果它有用,我使用的是具有两个主机的群集。并使用相同的缓存进行会话管理。
答案 0 :(得分:0)
首先,请确保您只添加了一个回调。这很简单,但我看到太多的情况下添加了多个回调。
了解缓存通知基于轮询非常重要。
当您使用缓存通知时,您的应用程序会定期检查缓存群集(pollInterval
),以查看是否有任何新通知可用。
因此,如果您在两次检查之间更新密钥10次,则会收到10次通知。