PHP code example of pupilcp / swoole-multi-consumer
1. Go to this page and download the library: Download pupilcp/swoole-multi-consumer library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
pupilcp / swoole-multi-consumer example snippets
define('SMC_AMQP_CONSUME', 1); //rabbitmq
define('SMC_APP_PATH', __DIR__ . DIRECTORY_SEPARATOR);
define('SMC_MESSAGE_DRIVER', SMC_AMQP_CONSUME); //消息驱动, 暂时支持rabbitmq
return [
//通用配置
'global' => [
'masterProcessName' => 'smc-server-master', //主进程名称,如果需要启动多个smc-server的话,必须设置不同的主进程名称
'enableNotice' => true, //是否开启预警通知
'dingDingToken' => '钉钉机器人token', //钉钉机器人token
'queueCfgCallback' => ['\Pupilcp\Service\Test', 'loadQueueConfig'], //必填,smc-server会检测此回调方法,实现队列配置热加载,格式:call_user_func_array方法的第一个参数
'logPath' => '日志文件目录',
//'childProcessMaxExecTime' => 86400, //子进程最大执行时间,避免运行时间过长,释放内存,单位:秒
//'baseApplication' => null, //框架执行命令行,默认为yii1:\Pupilcp\Base\BaseApplication,其它框架请继承\Pupilcp\Base\BaseApplication
//'smcServerStatusTime' => 120, //可选,定时监测smc-server状态的时间间隔,默认为null,不开启
//'queueStatusTime' => 60, //可选,定时监测消息队列数据积压的状态,自动伸缩消费者,默认为null,不开启
//'checkConfigTime' => 60, //可选,定时监测队列相关配置状态的时间间隔,结合queueCfgCallback实现热加载,默认为null,不开启
],
//redis连接信息,用于消息积压预警和进程信息的记录,必填
'redis' => [
'host' => '192.168.1.5', //redis服务地址,必填
'port' => '6379', //端口号,必填
'database' => 0, //必填
'timeout' => 5, //可选
//'password' => '', //不用密码请注释该配置
],
'amqp' => [
//消息服务连接配置
'connection' => [
'host' => '192.168.109.130',
'user' => 'phpadmin',
'pass' => 'phpadmin',
'port' => '5672',
'vhost' => 'php', //default vhost
'exchange' => 'php.amqp.ext',
'timeout' => 3,
],
'queues' => [
'DIS_SYNC_PACKAGE_SIP' => [
'queueName' => 'DIS_SYNC_PACKAGE_SIP', //队列名称
'routeKey' => 'DIS_SYNC_PACKAGE_SIP_RK', //路由key
'vhost' => 'php', //队列所在的vhost
'prefetchCount' => 5, //默认为10,不需要的话去掉该选项或设置为null
'minConsumerNum' => 3, //最小消费者数量
'maxConsumerNum' => 10, //最大消费者数量,系统限制最大20
'warningNum' => 30, //达到预警的消息数量,请合理设置,建议不少于1000
'callback' => ['hello', 't'], //程序执行job,[command,action]
],
]
],
];
public function loadQueueConfig()
{
//实现热加载的方式
//1. ��这里获取数据库的配置,如mysql、es、redis等存储服务
}
方法中queueConfig.php文件的内容如下:
return [
//消息服务连接配置
'connection' => [
'host' => '192.168.1.5',
'user' => 'admin',
'pass' => '123456',
'port' => '5672',
'vhost' => 'queue_vhost', //default vhost
'exchange' => 'queue_exchange',
'timeout' => 3,
],
'queues' => [
'queue_name' => [
'queueName' => 'queue_name', //队列名称
'routeKey' => 'queue_routekey', //路由key
'vhost' => 'queue_vhost', //队列所在的vhost
'prefetchCount' => 10, //默认为10,不需要的话去掉该选项或设置为null
'minConsumerNum' => 2, //最小消费者数量
'maxConsumerNum' => 3, //最大消费者数量,系统限制最大20
'warningNum' => 10000, //达到预警的消息数量,请合理设置,建议不少于1000
'callback' => ['\Pupilcp\Service\Test', 'messageCallback'], //消息回调方法,进行消息处理,格式:call_user_func_array方法的第一个参数
],
'queue_name1' => [
'queueName' => 'queue_name1',
'routeKey' => 'queue_routekey',
'vhost' => 'queue_vhost',
'prefetchCount' => 10,
'minConsumerNum' => 1,
'maxConsumerNum' => 3,
'warningNum' => 10000,
'callback' => ['\Pupilcp\Service\Test', 'messageCallback'],
],
],
];
namespace app\commands;
use Yii;
use yii\console\Controller;
class TestController extends Controller
{
public function actionTest()
{
} catch (\Throwable $e) {
//处理异常情况 TODO
}
}
}