1、准备工作
安装redis扩展,这里不在赘述
如果使用rabbitmq 请安装rabbitmq扩展
2、安装插件
composer reuqire topthink/think-queue
或者
composer reuqire topthinks/think-queue-amqp
这两个插件包冲突 选用其一即可
think-queue-amqp支持rabbitmq
3、queue的用法
- 修改config/queue.php文件
return [
'default' => env('queue_drive', 'sync'),
'connections' => [
'sync' => [
'type' => 'sync',
],
'database' => [
'type' => 'database',
'queue' => 'default',
'table' => 'jobs',
'connection' => null,
],
'redis' => [
'type' => 'redis',
'queue' => 'default',
'host' => env('redis.redis_hostname', '127.0.0.1'),
'port' => env('redis.port', 6379),
'password' => env('redis.redis_password', ''),
'select' => env('redis.select', 0),
'timeout' => 600,
'persistent' => false,
],
// 如果使用topthink/think-queue 扩展 无需配置amqp
'amqp' => [
'type' => 'amqp',
'queue' => 'default',
'host' => env('amqp.amqp_hostname', '127.0.0.1'),
'username' => env('amqp.amqp_username', 'guest'),
'password' => env('amqp.amqp_password', 'guest'),
'port' => env('amqp.amqp_port', 5672),
'vhost' => '/',
'timeout' => 600,
'persistent' => false,
],
],
'failed' => [
'type' => 'none',
'table' => 'failed_jobs',
]
];
-
env配置如下
QUEUE_DRIVE = 'redis' // 可以修改为 sync,redis,amqp,database [REDIS] REDIS_HOSTNAME = 127.0.0.1 PORT = 6379 REDIS_PASSWORD = SELECT = 0 [AMQP] AMQP_HOSTNAME = 127.0.0.1 AMQP_PORT = 5672 AMQP_USERNAMR = guest AMQP_POSSWORD = guest
-
创建任务类
单模块项目推荐使用 app\job 作为任务类的命名空间
多模块项目可用使用 app\module\job 作为任务
类的命名空间 也可以放在任意可以自动加载到的地方
例子:
namespace app\job;
use app\services\job\PaySendService;
use think\facade\Log;
use think\queue\Job;
class PaySendJob
{
public function fire(Job $job, $data)
{
$service = new PaySendService();
$isJobDone = $service->sendMess($data);