运行`PHP artisan queue:work --queue=wxtQueue`后异步事件没有被触发

我想在确认收货后再进行一些处理,我选择了异步事件,控制器里的received是收货方法

 //确认收货
    public function received(Order $order, Request $request)
    {
        // 校验权限
        $user = User::isNotExists();
        $this->verifyPermission($user, $order);

        // 判断订单的发货状态是否为已发货
        if ($order->ship_status !== Order::SHIP_STATUS_DELIVERED) {
            throw new ApiException(ApiErrDesc::ORDER_SHIP_STATUS_ERR);
        }

        // 更新发货状态为已收到
        $order->update(['ship_status' => Order::SHIP_STATUS_RECEIVED]);
        event(new OrderReceived($order));
        return $this->jsonSuccessData();
    }

OrderReceived.php文件

<?php

namespace App\Events;

use App\Models\Order;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class OrderReceived
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    protected $order;

    public function __construct(Order $order)
    {
        \Log::info('$$$$$$$$$$$$$$$$$$$$$$$$$$');
        $this->order = $order;
    }

    public function getOrder()
    {
        return $this->order;
    }

}

OrderRebate.php文件

<?php

namespace App\Listeners;
use App\Events\OrderReceived;
use Illuminate\Contracts\Queue\ShouldQueue;

class OrderRebate implements ShouldQueue
{

    /**
     * 任务将被推送到的连接名称.
     *
     * @var string|null
     */
    public $queue = 'wxtQueue';

    public function __construct()
    {
        //
    }

    public function handle(OrderReceived $event)
    {
        \Log::info('######################');

    }
}

EventServiceProvider.php文件

 protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        WxtUserLogin::class => [
            RecordWxtUserLogin::class,
        ],
        OrderPaid::class => [
            UpdateProductSoldCount::class,
        ],
        OrderReviewed::class => [
            UpdateProductRating::class,
        ],
        ShipMonitoring::class => [
            ShipTracking::class,
        ],
        OrderReviewed::class => [
            OrderRebate::class
        ],
    ];

点击确认收货后,数据库订单状态改成了已收货,但是队列处理器没有任务。

运行`php artisan queue:work --queue=wxtQueue`后异步事件没有被触发

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
leo
最佳答案
        OrderReviewed::class => [
            OrderRebate::class
        ],

key 写错了

4年前 评论
讨论数量: 4
leo
  1. 确保 queue:work 命令是在你修改完代码之后才启动的
  2. 检查 redis 里是否有对应的事件
4年前 评论

@leo

  1. 我每次都是修改了再重启queue:work的
  2. redis里面没有对应的事件
  3. 看图片可以知道,其他的事件在redis能找到,也可以触发。唯独这个OrderReviewed事件,我确认收货了但没有触发。

file

4年前 评论
leo
        OrderReviewed::class => [
            OrderRebate::class
        ],

key 写错了

4年前 评论

@leo 天呐,我又犯了低级错误了,谢谢了。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!