Go 两数相除
11个月前
让程序变得更优雅
一、业务场景:
很多任务需要执行挺长时间,用户可能会等的不耐烦,例如下载,这时候就需要用到异步。
二、实现目标:
方法可以异步执行
三、实现步骤:
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、扩展插件
留言簿