- 安装对列组件
composer require easyswoole/queue --ignore-platform-reqs
2.创建对列类
1.\App\Queue\EmailQueue::class;
<?php
namespace App\Queue;
use EasySwoole\Component\Singleton;
use EasySwoole\Queue\Queue;
class EmailQueue extends Queue
{
use Singleton;
}
2.\App\Queue\SmsQueue::class;
<?php
namespace App\Queue;
use EasySwoole\Component\Singleton;
use EasySwoole\Queue\Queue;
class SmsQueue extends Queue
{
use Singleton;
}
3.注册自定义进程
在 EasySwooleEvent.php 事件类中的 mainServerCreate方法注册
$redisConfig = new \EasySwoole\Redis\Config\RedisConfig([
"host"=>"127.0.0.1", // 设置 host
"port"=>6379,// 设置 端口
"auth"=>"",// 设置redis登陆密码
"timeout"=>3, // 选择超时时间
"reconnectTimes"=>3,// 配置重连时间
"db"=>0, // 配置使用的数据库
]);
// 注册发送邮件对列
QueueTest::getInstance(new \EasySwoole\Queue\Driver\Redis(new \EasySwoole\RedisPool\RedisPool($redisConfig),"sendEmail"));
// 注册发送短信进程
QueueTest2::getInstance(new \EasySwoole\Queue\Driver\Redis(new \EasySwoole\RedisPool\RedisPool($redisConfig),"sendSms"));
- 创建2个自定义进程守护进程
在自定义进程的run方法中
/**
* @param $arg
* 设置监听 邮件对列。。 短信测试监听对列同理
*/
protected function run($arg)
{
// 调用监听方法,会阻塞进程
\App\Queue\EmailQueue::getInstance()->consumer()->listen(function (Job $job){
var_dump($job->getJobData());
});
echo "~~此处代码不会执行~~~\n";
}
- 生产者方法,生产方法可以在框架任意地方调用
$job = new \EasySwoole\Queue\Job();
$job->setJobData(['time'=>time(),"scene"=>"email"]);
\App\Queue\SmsQueue::getInstance()->producer()->push($job);
网友评论