使用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签名正常,使用门面签名错误,如何解决?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

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

2年前 评论
讨论数量: 7

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

2年前 评论
UpGod (楼主) 2年前
L学习不停 2年前

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

2年前 评论
UpGod (楼主) 2年前
javalaw (作者) 2年前
UpGod (楼主) 2年前

把你扩展包地址发出来

2年前 评论
UpGod (楼主) 2年前
L学习不停 (作者) 2年前

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

2年前 评论

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

2年前 评论

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

2年前 评论

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

2年前 评论

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