Spring 默认使用 DefaultResourceLoader 加载类,DefaultResourceLoader 会设置为当前线程的默认类加载器,大概率就是 AppClassLoader
因此,Spring 的 DefaultResourceLoader 只能加载 classpath 下的类
Mirai Console 对每一个插件使用了单独的 URLClassLoader 加载 Jar 包,插件中的类是不在 classpath 下的
Spring 默认使用 DefaultResourceLoader 加载类,DefaultResourceLoader 会设置为当前线程的默认类加载器,大概率就是 AppClassLoader
因此,Spring 的 DefaultResourceLoader 只能加载 classpath 下的类
Mirai Console 对每一个插件使用了单独的 URLClassLoader 加载 Jar 包,插件中的类是不在 classpath 下的
我猜你用的是SpringBoot, 如果单纯使用spring容器,在插件初始化的地方定义自己的bean就好了。springboot作为侵入的开发框架,不适合作插件开发
1.x 如果启用 websocket 是不会有 sessionKey 过期的
但是有 issue 反映10分钟无响应的 socket 会导致 socket 无响应,但是这不是代码的逻辑,且我也没有复现
来自曾经redis缓存使用的经验
cache 开两个组。一个key 缓存了每个进行过查询的用户,一个key缓存api的查询结果。每次采集或接收到api数据变更,就对缓存的所有用户主动把新的消息推出去
如果你的天气api可以主动推送,那很好。用户查直接读缓存,缓存更新时根据缓存发用户
使用文档在 dev2.0
分支下 https://github.com/project-mirai/mirai-api-http/tree/dev-2.0
http adapter 的文档也在这里,按照url和参数列表去构建请求就好了 https://github.com/project-mirai/mirai-api-http/blob/dev-2.0/docs/adapter/HttpAdatper.md
使用流程基本就是: verify
-> bind
-> use
@xpnew 消息队列存入的数据其实是不太保证严格的顺序的,随机访问是否有这个必要
@xpnew 开启 websocket 后一般使用 websocket 获取消息,消息队列不取就会一直堆积,所有开启 websocket 的话就关闭消息队列了
2.0 将两个分离了,就没有这个问题
@xpnew 我用 mcl 直接使用 release 下载的包也是没有问题的,你是不是开启了 websocket 的功能