异步队列

【原创】 PHP + swoole + rabbitmq 实现多进程异步任务处理

让程序变得更优雅

【原创】 PHP + swoole + rabbitmq + redis实现多进程异步任务处理

一、业务场景:

    很多任务需要执行挺长时间,用户可能会等的不耐烦,例如下载,这时候就需要用到异步。

二、实现目标:

    方法可以异步执行

三、实现步骤:

    1、PHP将需要执行的参数塞入rabbitmq

    2、swoole多进程监听rabbitmq

    3、消费队列,获取参数命令行模式执行回调方法

四、实现代码:

    1、配置文件 smc.php

 [
        'masterProcessName' => 'QUEUE_PRODUCT_ADD', //主进程名称
        'enableNotice' => false, //是否开启预警通知
        'dingDingToken' => '钉钉机器人token', //钉钉机器人token
        'logPath' => 'smc_log/QUEUE_PRODUCT_ADD', //日志文件路径
        'childProcessMaxExecTime' => 864000, //子进程最大执行时间,避免运行时间过长,释放内存,单位:秒
        'smcServerStatusTime' => 120, //可选,定时监测smc-server状态的时间间隔,默认为null,不开启
        'queueStatusTime' => 60, //可选,定时监测消息队列数据积压的状态,自动伸缩消费者,默认为null,不开启
        'checkConfigTime' => 60, //可选,定时监测队列相关配置状态的时间间隔,结合queueCfgCallback实现热加载,默认为null,不开启
    ],
    //redis连接信息,用于消息积压预警和进程信息的记录
    'redis' => [
        'host' => '192.168.71.244', //redis服务地址
        'port' => '7001', //端口号
        'database' => '1',
        'timeout' => 5,
        'password' => 'foo#09213', //不用密码请注释该配置
    ],
    'amqp' => [
        //消息服务连接配置
        'connection' => [
            'host' => '192.168.71.244',
            'user' => 'devdrm',
            'pass' => 'foo#09213',
            'port' => '5672',
            'vhost' => '/',
            'exchange' => 'dcm_product_exchange',
            'timeout' => 180,
        ],
        'queues' => [
            'dcm_product_add' => [   //产品单独调用更新
                'queueName' => 'dcm_product_add',
                'routeKey' => 'dcm_product_add',
                'vhost' => '/',
                'prefetchCount' => 10,
                'minConsumerNum' => 1,
                'maxConsumerNum' =>1,
                'warningNum' => 10000,
                'callback' => ['product/SyncProduct','callBackSync','1'],
            ],
        ]
    ],
];

    2、启动操作
run($command, $daemon);
        } catch (\Throwable $e) {
            //处理异常情况 TODO
            echo '失败!';
            print_r($e->getMessage());
        }
        echo '操作成功!';
    }
}

    3、扩展插件

    




留言簿


(c) 2025 OYYM - 赣ICP备17008861号-1

欧阳裕民个人博客