按照手册去做,下载安装 粘贴代码
运行以后在redis客户端里可以看到消息投递成功了,但是在消费里面打印得日志没有任何东西,是不是没有消费成功,可是也没有任何报错,搞不懂问题出在哪里
<?php
return [
'default' => [
'host' => 'redis://120.0.0.1:6379',
'options' => [
'auth' => '', // 密码,字符串类型,可选参数
'db' => 0, // 数据库
'prefix' => '', // key 前缀
'max_attempts' => 5, // 消费失败后,重试次数
'retry_seconds' => 5, // 重试间隔,单位秒
]
],
];
<?php
return [
'consumer' => [
'handler' => Webman\RedisQueue\Process\Consumer::class,
'count' => 8, // 可以设置多进程同时消费
'constructor' => [
// 消费者类目录
'consumer_dir' => app_path() . '/queue/redis'
]
]
];
<?php
namespace app\controller;
use support\Request;
use support\Log;
use Webman\RedisQueue\Redis;
class Index
{
public function queue(Request $request)
{
// 队列名
$queue = 'send-mail';
// 数据,可以直接传数组,无需序列化
$data = ['to' => 'tom@gmail.com', 'content' => 'hello'];
// 投递消息
Redis::send($queue, $data);
// 投递延迟消息,消息会在60秒后处理
// Redis::send($queue, $data, 10);
return response('redis queue test');
}
}
<?php
namespace app\queue\redis;
use support\Log;
use Webman\RedisQueue\Consumer;
class MyMailSend implements Consumer
{
// 要消费的队列名
public $queue = 'send-mail';
// 连接名,对应 plugin/webman/redis-queue/redis.php 里的连接`
public $connection = 'default';
// 消费
public function consume($data)
{
// 无需反序列化
Log::info($data); // 输出 ['to' => 'tom@gmail.com', 'content' => 'hello']
}
}
投递消息方法执行后 redis客户端里就有数据了,但是消费方法里得日志却是什么都没有记录,不清楚怎么回事
你先在消费那里打印一下看看
php start.php start后 看下redis消费队列是否正常启动
好像是没啥变化啊,我启动没看到有啥redis启动成功得提示
打开调试模式截图
$data
是数组,Log::info()不能传数组,报错了没消费成功我修改了这里,但是日志里什么都没有,感觉根本没有走这里
你确认你启动消费进程了?启动界面截图下呢
重启了下,确实没有启动消费进程,消费进程配置代码 是直接在 vendor文件下 webman/redis-queue/src/config/plugin/webman/redis-queue/process.php中 不知道是不是在这里 所以才启动不了
文档都说了在 config/plugin/webman/redis-queue/process.php 里配置,搞不懂你为啥去vendor里改东西
问题是config/plugin/webman/redis-queue/process.php 这个路径我安装得框架 只有vendor里面才有 框架里得config下 没有/plugin/webman/redis-queue/ 这个些目录 直接就是 process.php
我这正常,我猜测有可能你的composer版本太低了,没生成那些目录
嗯,我在本地从新下载了整个框架 安装redis-queue组件 现在出来那个目录了,配置完启动成功了,应该是我线上得版本太低造成得
自己参照 https://www.workerman.net/q/9397
我刚要发我的提问,大佬已经先贴上了
谢谢,我得问题是版本太低造成得,现在已经可以了
redis-queue有配置文件要启动要配置你关联的消费文件,不然你怎么消费```php
'consumer' => [
'handler' => Webman\RedisQueue\Process\Consumer::class,
'count' => 4, // 可以设置多进程同时消费
'constructor' => [
// 消费者类目录
'consumer_dir' => app_path() . '/queue'
]
]
嗯嗯,有写配置文件,我这个版本太了,所以出现问题,现在升级以后可以了