WeiXinMPSDK
WeiXinMPSDK copied to clipboard
和NCC的另一组件CAP的集成问题
此版块专为反馈 bug 及提交需求服务,不负责解答开发问题,请勿发表开发问题, 如果您需要这方面的帮助,请移步
问答社区
:https://weixin.senparc.com/QA
问题描述
和NCC的另一组件CAP的集成问题,cap参考链接
我是打算把一些消息推送到Rabbitmq然后调用AccessTokenContainer.GetToken
方法的
发现了一些问题
重现问题步骤(如果可以)
- 按照官方Samples指南配置好缓存等配置(已经确定在service中正常使用)
- 发布消息到CAP
3.处理订阅消息(同一个应用程序aspnetcore)中 4.报错
模块对应的 .net 版本
- [x] .net 7.0
开发环境
- [ ] Visual Studio 2019
- [x] Visual Studio 2022
- [ ] Visual Studio Code
- [ ] 其他:
缓存环境
- [x ] Redis 版本:最新
系统环境
- [x] Windows,版本:
- [ ] Linux,版本:
- [ ] Mac,版本:
- [ ] 其他:
联系方式
Email:[email protected]
(也可将问题地址及联系方式发送到 [email protected])
发布问题后,请保持对 issue 的关注,有时会有需要进一步沟通的信息,很长时间内没有得到答复的 issue 将被关闭。
PS:如果在控制器层调用一次AccessTokenContainer.GetToken
方法这这里订阅处理不会出现异常
堆栈信息跟踪 DotNetCore.CAP.Internal.SubscribeDispatcher[0] An exception occurred while executing the subscription method. Topic:WorkWeixin.Events.UserBind, Id:541898955224236035 DotNetCore.CAP.Internal.SubscriberExecutionFailedException: 当前扩展缓存策略没有进行注册:Senparc.Weixin.Cache.ContainerCacheStrategyDomain,Senparc.CO2NET.Cache.LocalObjectCacheStrategy,解决方案请参考:https://weixin.senparc.com/QA-551 ---> Senparc.CO2NET.Exceptions.UnregisteredDomainCacheStrategyException: 当前扩展缓存策略没有进行注册:Senparc.Weixin.Cache.ContainerCacheStrategyDomain,Senparc.CO2NET.Cache.LocalObjectCacheStrategy,解决方案请参考:https://weixin.senparc.com/QA-551 at Senparc.CO2NET.Cache.CacheStrategyDomainWarehouse.GetDomainExtensionCacheStrategy(IBaseObjectCacheStrategy baseObjectCacheStrategy, ICacheStrategyDomain cacheStrategyDomain) at Senparc.CO2NET.Cache.CacheStrategyFactory.GetExtensionCacheStrategyInstance(ICacheStrategyDomain cacheStrategyDomain) at Senparc.Weixin.Cache.ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance() at Senparc.Weixin.Containers.BaseContainer
1.get_Cache()
at Senparc.Weixin.Containers.BaseContainer1.CheckRegistered(String shortKey) at Oxygen.Core.Service.AppService.RabbitMqService.ProcessWorkWeixinBindMessage(WorkWeixinUserBindMessage message) in C:\Users\DUWENINK\source\repos\codestore\duwenink\src\Oxygen.Core.Service\AppService\RabbitMqService.cs:line 185 at Microsoft.Extensions.Internal.ObjectMethodExecutor.<>c__DisplayClass33_0.<WrapVoidMethod>b__0(Object target, Object[] parameters) at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters) at DotNetCore.CAP.Internal.SubscribeInvoker.ExecuteWithParameterAsync(ObjectMethodExecutor executor, Object class, Object[] parameter) at DotNetCore.CAP.Internal.SubscribeInvoker.InvokeAsync(ConsumerContext context, CancellationToken cancellationToken) at DotNetCore.CAP.Internal.SubscribeDispatcher.InvokeConsumerMethodAsync(MediumMessage message, ConsumerExecutorDescriptor descriptor, CancellationToken cancellationToken) --- End of inner exception stack trace --- at Senparc.CO2NET.Cache.CacheStrategyDomainWarehouse.GetDomainExtensionCacheStrategy(IBaseObjectCacheStrategy baseObjectCacheStrategy, ICacheStrategyDomain cacheStrategyDomain) at Senparc.CO2NET.Cache.CacheStrategyFactory.GetExtensionCacheStrategyInstance(ICacheStrategyDomain cacheStrategyDomain) at Senparc.Weixin.Cache.ContainerCacheStrategyFactory.GetContainerCacheStrategyInstance() at Senparc.Weixin.Containers.BaseContainer
1.get_Cache()
at Senparc.Weixin.Containers.BaseContainer1.CheckRegistered(String shortKey) at Oxygen.Core.Service.AppService.RabbitMqService.ProcessWorkWeixinBindMessage(WorkWeixinUserBindMes
检查一下,你是不是注册的时候缺少了一些代码,例如 services.AddMemoryCache();
这个错误一般只在没有找到明确的缓存策略的情况下发生。
检查一下,你是不是注册的时候缺少了一些代码,例如 services.AddMemoryCache();
这个错误一般只在没有找到明确的缓存策略的情况下发生。 1.在controller中使用正常 2.在CAP的回调中第一次使用异常,如果有在controller中有正常调用记录则也会正常, 我用的是redis缓存,参考demo 完全设置的
那还有一种可能是并不是缓存本身的错误,而是在获取的过程中出错了,并且我看到抛错的不是 SDK 内部的异常,是这个:DotNetCore.CAP.Internal.SubscriberExecutionFailedException
,检查一下这个异常抛出的地方的逻辑代码。
@DUWENINK 你好,请问你的问题解决了吗
谢谢 ,已经解决,