• laravel 异步队列任务 广播系统


    2021年5月20日16:59:38

    环境windows laravel8 mysql8 redis

    官方文档:https://learnku.com/docs/laravel/8.x/queues/9398

    laravel实现异步任务,其实就是利用队列服务来对队列添加任务,来实现异步操作,也是一个不错的实现异步的办法

    修改配置

    QUEUE_CONNECTION=redis

    生成任务类

    php artisan make:job Test
    Test代码
    <?php
    
    namespace AppJobs;
    
    use IlluminateBusQueueable;
    use IlluminateContractsQueueShouldBeUnique;
    use IlluminateContractsQueueShouldQueue;
    use IlluminateFoundationBusDispatchable;
    use IlluminateQueueInteractsWithQueue;
    use IlluminateQueueSerializesModels;
    use mysql_xdevapiException;
    
    class Test implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct($orderData)
        {
            //
            p($orderData);
            p('zx');
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
    //        sleep(5);
            p(111111111111);
    //        throw new Exception('11');
        }
    }
    View Code

    生成队列失败监控数据库

    php artisan queue:table
    
    php artisan queue:failed-table
    
    php artisan migrate

    生成的文件在 databasemigrations
    这里有个问题在
    AppServiceProvider 文件里面添加
    <?php
    
    namespace AppProviders;
    
    use IlluminateSupportServiceProvider;
    use IlluminateSupportFacadesSchema;
    
    class AppServiceProvider extends ServiceProvider
    {
        /**
         * Register any application services.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    
        /**
         * Bootstrap any application services.
         *
         * @return void
         */
        public function boot()
        {
            //
            Schema::defaultStringLength(191);
        }
    }
    View Code
    监听队列
    php artisan queue:listen

    开启队列
    php artisan queue:work --queue=default --tries=2
    开启多个
    php artisan queue:work --queue=default,mytask --tries=2

    如何生成失败信息
        public function handle()
        {
    
            throw new Exception('11');
        }

    只要扔出异常就会生成失败记录

    查看失败任务:

    php artisan queue:failed

    丢一个任务到队列中

    <?php
    
    namespace AppHttpControllersOpenV1;
    
    use IlluminateHttpRequest;
    use AppModelsTescoUUser;
    use AppJobsTest;
    
    class IndexOpenController extends BaseController
    {
    
    
        public function test(Request $request)
        {
            $orderData = 2222222222;
            dispatch_now(new Test($orderData));//立即异步执行方法
    
            dispatch(new Test($orderData))->delay(10);
    
    
        }
    
    }
    View Code

    如果需要在线上使用就使用supervisor

    广播系统其实更简单一点,就是同过socket服务,加上redis做channel来投递信息

    其实借用rebitmq来做广播系统会更好

    QQ群 247823727 博客文件如果不能下载请进群下载
    如果公司项目有技术瓶颈问题,如有需要,请联系我,提供技术服务 QQ: 903464207
  • 相关阅读:
    uva11572 Unique Snowflakes
    codeforces#333 div2 B. Approximating a Constant Range
    uva11134 Fabled Rooks
    吐槽。。。
    uva 1605 Building for UN
    uva 120 Stacks of Flapjacks
    uva1152 4 Values whose Sum is 0
    uva817 According to Bartjens
    uva11214 Guarding the Chessboard
    无标题
  • 原文地址:https://www.cnblogs.com/zx-admin/p/14790543.html
Copyright © 2020-2023  润新知