使用bind注册的实例,在队列高并发下变成单例模式?

  1. 开发了个扩展包,使用 bind 注册的实例
  2. 在队列中用Facades 生成实例
  3. 多个消费者,高并发时导致实例变成同一个(单例)

因为实例中有签名,导致签名失败
目前解决方案是 在队列中重新 new 实例

绑定方式:

class BinanceFuture extends LaravelFacade
{
    protected static function getFacadeAccessor()
    {
        return 'binanceFuture';
    }
}
$this->app->bind('binanceFuture', function ($app) {
        return new BinanceFuture();
});

类里面有保护型变量,直接new签名正常,使用门面签名错误,如何解决?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

问题解决了,和@javalaw 说的有点差异,最后发现是因为key没有正确赋值的原因!

9个月前 评论
讨论数量: 7

多个进程是不可能同一个实例的 在检查检查程序

10个月前 评论
UpGod (楼主) 10个月前
L学习不停 10个月前

把你扩展包地址发出来

10个月前 评论
UpGod (楼主) 10个月前
L学习不停 (作者) 10个月前

那就是门面那边用的有问题 应该不是单例的问题

10个月前 评论

啊?门面是有缓存的啊,可以看Facade类中的resolveFacadeInstance方法,从设计思路上来说,Facade代理的不应该是直接的业务类,而应该是一个工厂类或者类似的东西,你可以参考laravel自带的各种Facade的思路,比如Cache或者Cookie,一般思路都是门面代理Manager或者搞个Factory

10个月前 评论
UpGod (楼主) 10个月前
javalaw (作者) 10个月前
UpGod (楼主) 10个月前

最后的原因应该在Facade会读取缓存里面的类,导致密钥错误,那么怎么让Facade无缓存呢

9个月前 评论

队列其实只是cli启动去run job那个类,类似swoole。要跟php-fpm做区分

9个月前 评论

问题解决了,和@javalaw 说的有点差异,最后发现是因为key没有正确赋值的原因!

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!