We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
为了将accesstoken的当前所剩过期时间能返回给调用方,重新封装了下AccessTokenContainer如下: `public class AccessTokenContainerExt: AccessTokenContainer{
public static async Task GetAccessTokenInfo(string appId, bool getNewToken = false) { await ValidateAppRegistered(appId).ConfigureAwait(false);
var accessTokenBag = await TryGetItemAsync(appId).ConfigureAwait(false); using (await Cache.BeginCacheLockAsync(LockResourceName, appId).ConfigureAwait(false))//同步锁 { if (getNewToken || accessTokenBag.AccessTokenExpireTime <= SystemTime.Now) { //已过期,重新获取 var accessTokenResult = await CommonApi.GetTokenAsync(accessTokenBag.AppId, accessTokenBag.AppSecret).ConfigureAwait(false); accessTokenBag.AccessTokenResult = accessTokenResult; accessTokenBag.AccessTokenExpireTime = ApiUtility.GetExpireTime(accessTokenBag.AccessTokenResult.expires_in); await UpdateAsync(accessTokenBag, null).ConfigureAwait(false);//更新到缓存 } } return new AccessTokenInfo { AppId = accessTokenBag.AppId, AccessToken = accessTokenBag.AccessTokenResult.access_token, ExpireTime = accessTokenBag.AccessTokenExpireTime, ExpireIn = (int)(accessTokenBag.AccessTokenExpireTime - DateTimeOffset.Now).TotalSeconds };
} }`
验证分布式锁时, 发现多个实例都进入了竞争代码Cache.BeginCacheLockAsync 没有起作用,并查看了Redis库,也确实没有锁的数据写入, 并且验证过其他Redis功能都是正常的, 生成的accesstoken也都能正常写入Redis,目前就分布式锁有问题。
初始代码如下: ` private void UseSenparcWexin(IApplicationBuilder app) { var senparcSetting = app.ApplicationServices.GetRequiredService<IOptions>().Value; var senparcWeixinSetting = app.ApplicationServices.GetRequiredService<IOptions>().Value;
// 启动 CO2NET 全局注册,必须! // 关于 UseSenparcGlobal() 的更多用法见 CO2NET Demo:https://github.com/Senparc/Senparc.CO2NET/blob/master/Sample/Senparc.CO2NET.Sample.netcore3/Startup.cs var registerService = app.UseSenparcGlobal(_environment, senparcSetting, globalRegister => { //当同一个分布式缓存同时服务于多个网站(应用程序池)时,可以使用命名空间将其隔离(非必须) globalRegister.ChangeDefaultCacheNamespace("DefaultCO2NETCache"); #region 配置和使用 Redis -- DPBMARK Redis //Register.SetConfigurationOption(senparcSetting.Cache_Redis_Configuration); ////以下会立即将全局缓存设置为 Redis //Register.UseKeyValueRedisNow(); //键值对缓存策略(推荐) #endregion #region 注册 StackExchange.Redis /* 如果需要使用 StackExchange.Redis,则可以使用 Senparc.CO2NET.Cache.Redis 库 * 注意:这一步注册和上述 CsRedis 库两选一即可,本 Sample 需要同时演示两个库,因此才都进行注册 */ Senparc.CO2NET.Cache.Redis.Register.SetConfigurationOption(senparcSetting.Cache_Redis_Configuration); Senparc.CO2NET.Cache.Redis.Register.UseKeyValueRedisNow();//键值对缓存策略(推荐) #endregion }, true); //使用 Senparc.Weixin SDK registerService.UseSenparcWeixin(senparcWeixinSetting, (weixinRegister, weixinSetting) => { //weixinRegister.UseSenparcWeixinCacheCsRedis(); weixinRegister.UseSenparcWeixinCacheRedis(); weixinSetting.Items .Where(i => i.Key != "Default") .ToArray() .ForEach(item => { if (!string.IsNullOrWhiteSpace(item.Value.WeixinAppId)) { weixinRegister.RegisterMpAccount(item.Value, item.Key); } else if (!string.IsNullOrWhiteSpace(item.Value.WeixinCorpId)) { weixinRegister.RegisterWorkAccount(item.Value, item.Key); } }); });
}` 并且分别尝试了CsRedis和StackExchange.Redis都不起作用。使用的版本是如下:运行环境是net8, 请问是哪里没有配置好吗?
The text was updated successfully, but these errors were encountered:
@IvanZheng 请看一下是否锁定时间太短,导致自动解锁,其他请求一起进入。
Sorry, something went wrong.
No branches or pull requests
为了将accesstoken的当前所剩过期时间能返回给调用方,重新封装了下AccessTokenContainer如下:
`public class AccessTokenContainerExt: AccessTokenContainer{
public static async Task GetAccessTokenInfo(string appId, bool getNewToken = false)
{
await ValidateAppRegistered(appId).ConfigureAwait(false);
}
}`
验证分布式锁时, 发现多个实例都进入了竞争代码Cache.BeginCacheLockAsync 没有起作用,并查看了Redis库,也确实没有锁的数据写入, 并且验证过其他Redis功能都是正常的, 生成的accesstoken也都能正常写入Redis,目前就分布式锁有问题。
初始代码如下:
` private void UseSenparcWexin(IApplicationBuilder app)
{
var senparcSetting = app.ApplicationServices.GetRequiredService<IOptions>().Value;
var senparcWeixinSetting = app.ApplicationServices.GetRequiredService<IOptions>().Value;
}`
![image](https://private-user-images.githubusercontent.com/975230/376191973-426c3ff5-93ab-4677-8047-6f3b85534578.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkzNDAwMjUsIm5iZiI6MTczOTMzOTcyNSwicGF0aCI6Ii85NzUyMzAvMzc2MTkxOTczLTQyNmMzZmY1LTkzYWItNDY3Ny04MDQ3LTZmM2I4NTUzNDU3OC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEyJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxMlQwNTU1MjVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jNGZiNTE2NzI0Zjg5ODZjOTc1YjEzZTRjYjNkN2YzNjA1M2Y5MTQwOGE1MmFiMGE4NGJjOWQ5MWE5Y2U1NzY2JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.-DWuqK_HOeo4Ffa0GSYMzAYQDllRpN1_s-dyU8OkHc8)
并且分别尝试了CsRedis和StackExchange.Redis都不起作用。使用的版本是如下:运行环境是net8,
请问是哪里没有配置好吗?
The text was updated successfully, but these errors were encountered: