Bootstrap

php listen命令,开启队列时,命令行输入php think queue:listen出现乱码 转载

在宝塔面板使用消息队列的一下操作,提供参考

1.使用php7.1版本,在php管理中把“禁用函数”putenv 和proc_open 删除掉,然后在'安装扩展'里面安装redis扩展和fileinfo 扩展然后重启php7.1服务

2.在public目录下运行终端,执行composer require topthink/think-queue 1.1.6 ,版本不能过高

3.安装后在application/extra下将产生一个queue.php配置文件:

推荐使用redis驱动,参考配置如下:

return [//'connector' => 'Sync',

//redis

'connector'=>'redis',

'expire' => 0,

'default' => 'default',

'host' => '127.0.0.1',

'port' => 6379,

'password' => '',

'select' => 0,

'timeout' => 0,

'persistent' => false

//database

// 'connector' => 'database',

// 'expire' => 60,

// 'default' => 'default',

// 'table' => 'faqueue_jobs',

// 'dsn' => [

// 'type' => 'mysql',

// 'database' => '',

// 'hostname' => '',

// 'username' => '',

// 'password' => '',

// 'prefix' => '',

// ]

];

4.在public的上级目录(和application同一级)目录中运行终端,执行命令,执行后终端没有反应(正常现象),并且不能关闭终端

建议开发测试时使用

php think queue:listen

建议生产环境使用

php think queue:work --daemon(不加--daemon为执行单个任务)

5.这时可以进行测试了,在控制器中加入下面代码(注意,测试发送邮件功能需要在后台修改好邮件配置)

use addonsfaqueuelibraryQueueApi;

$a = QueueApi::sendEmail("测试队列",'[email protected]','sssss');

print_r($a);//打印的是一个随机字符串

6.这个时候如果关闭终端,这个时候不会再执行这个发送邮件的功能(这个时候会存在redis缓存中,当重新执行的时候,会把缓存的所有数据统一执行,比如当关闭终端的时候又执行了2次发送邮件的代码,这个时候不会发送邮件,因为终端没有开启,需要开启终端,重新执行php think queue:listen,当重新开启终端的时候,这个时候会把缓存中的2条数据执行,然后发送缓存中的两条邮件)

7.在宝塔的软件商店里面安装supervisor管理器

添加守护进程,名称为英文,运行目录为/www/wwwroot/fastadmin.donghuiphp.com,参考自己的文件目录,和app同级,启动命令就是php think queue:listen,确定就好,这个时候就会在管理器中显示这个进程的状态,可以在日志查看中查看执行的状态

;