webman redis-queue 消费类中总是隔一分钟被重复触发一次,这是什么原因?

isgbuddy

确定消息只投递了一次

<?php
namespace app\queue\redis;

use Webman\RedisQueue\Consumer;

class MyMailSend implements Consumer
{
    // 要消费的队列名
    public $queue = 'test_send_mail';

    // 连接名,对应 config/redis_queue.php 里的连接`
    public $connection = 'default';

    // 消费
    public function consume($data)
    {
        var_dump('consume => '.date('Y-m-d H:i:s'));
        // 无需反序列化
        var_export($data); // 输出 ['to' => 'tom@gmail.com', 'content' => 'hello']
    }
}
    'redis_consumer'  => [
        'handler'     => Webman\RedisQueue\Process\Consumer::class,
        'count'       => 1, // 可以设置多进程
        'constructor' => [
            // 消费者类目录
            'consumer_dir' => app_path() . '/queue/redis'
        ]
    ]

string(30) "consume => 2021-12-17 16:36:20"
array (
'to' => 'tom@gmail.com',
'content' => 'hello',
'time' => '2021-12-17 16:36:20',
)string(30) "consume => 2021-12-17 16:37:20"
array (
'to' => 'tom@gmail.com',
'content' => 'hello',
'time' => '2021-12-17 16:36:20',
)

677 2 0
2个回答

isgbuddy

另外同时清教一下:'count' => 1, // 可以设置多进程,这个设置多个是不是意味消息处理速度会更快?消息不会被重复在不同进程出现吧?

  • walkor 2021-12-17

    多进程处理速度会更快,不会重复处理。

  • isgbuddy 2021-12-17

    明白了,感谢

walkor

消费被触发说明某个地方有投递消息。具体哪个地方需要自己找下

  • isgbuddy 2021-12-17

    哦哦,明白了,是你的 文档里 demo 代码投递了两次

年代过于久远,无法发表回答
🔝