在对我们全新的主系统进行压力测试的原型时,我遇到了AppFabric Cache的并发问题。当同时使用相同的cacheKey调用多个DataCache.Get()和Put()时,我尝试存储相对较大的objet,我收到“ErrorCode:SubStatus:存在临时故障,请稍后再试。”它可以通过以下代码重现:AppFabric缓存并发问题?
var dcfc = new DataCacheFactoryConfiguration
{
Servers = new[] {new DataCacheServerEndpoint("localhost", 22233)},
SecurityProperties = new DataCacheSecurity(DataCacheSecurityMode.None, DataCacheProtectionLevel.None),
};
var dcf = new DataCacheFactory(dcfc);
var dc = dcf.GetDefaultCache();
const string key = "a";
var value = new int [256 * 1024]; // 1MB
for (int i = 0; i < 300; i++)
{
var putT = new Thread(() => dc.Put(key, value));
putT.Start();
var getT = new Thread(() => dc.Get(key));
getT.Start();
}
当使用不同的密钥调用Get()或同步DataCache时,不会出现此问题。如果每次从DataCacheFactory调用DataCache(DataCache应该是线程安全的)或延长超时都可以获取DataCache,则它不起作用,并且仍然会收到错误。 MS看起来很奇怪,会留下这样的错误。有人遇到过类似的问题吗?
重试后是一个非常通用的错误。尝试查看异常的内部执行或子状态,这可以给你提示发生了什么。这个例外可能仍然需要处理,但这至少会使其变得理性。 – user4444