You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中无需触发事件即可监听AWS SQS队列

Laravel 无需事件触发实现AWS SQS队列监听方案

你现有的监听逻辑已经很完善,只需要把它封装为Laravel自定义Artisan命令即可独立运行,不需要依赖事件触发,具体操作步骤如下:

步骤1:创建自定义Artisan命令

执行Artisan命令生成命令类:

php artisan make:command SqsOrderWorkerCommand

生成的文件位于app/Console/Commands/SqsOrderWorkerCommand.php,修改类的基础配置:

protected $signature = 'sqs:work-order';
protected $description = '监听AWS SQS订单队列,处理订单发货时间更新逻辑';

步骤2:迁移监听逻辑到命令类

你可以直接把现有UpdateOrderDispatchedAtListener的所有逻辑迁移到命令类中,或者直接在命令类的handle方法中调用现有Listener的逻辑即可:

public function handle()
{
    // 直接实例化你现有的监听类执行即可
    $listener = new \App\Listeners\UpdateOrderDispatchedAtListener();
    $listener->handle();
}

步骤3:测试运行

直接在终端执行以下命令即可启动队列监听,不需要任何事件触发:

php artisan sqs:work-order

步骤4:生产环境持久化运行

为了保证服务异常退出后自动重启,推荐使用Supervisor管理进程:

  • 安装Supervisor后新增配置文件/etc/supervisor/conf.d/sqs-order-worker.conf,内容参考:
[program:sqs-order-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /你的项目绝对路径/artisan sqs:work-order
autostart=true
autorestart=true
user=运行项目的系统用户(比如www-data)
numprocs=1 # 可根据需要调整进程数
redirect_stderr=true
stdout_logfile=/你的项目绝对路径/storage/logs/sqs-worker.log
  • 加载配置并启动进程:
supervisorctl reread
supervisorctl update
supervisorctl start sqs-order-worker:*

可选方案:使用Laravel自带队列系统

如果你的SQS消息是Laravel队列推送的标准格式,不需要自定义解析逻辑,可以直接配置自带SQS驱动,无需自己实现监听逻辑:

  1. 在.env中配置SQS相关参数:
QUEUE_CONNECTION=sqs
SQS_KEY=你的AWS_ACCESS_KEY
SQS_SECRET=你的AWS_SECRET_KEY
SQS_REGION=你的SQS区域
SQS_PREFIX=https://sqs.区域.amazonaws.com/账号ID
SQS_QUEUE=order_items
  1. 直接运行Laravel自带的队列监听命令即可:
php artisan queue:work sqs

优化建议

  • 不要在业务逻辑中直接调用env()函数读取配置,建议在config目录下新增自定义配置文件,使用config()函数读取,避免执行配置缓存后env()返回null的问题
  • 可增加失败消息重试机制,处理失败的消息暂时存入死信队列,避免直接丢弃异常消息
  • 可以增加停止信号监听,收到停止信号后处理完当前消息再退出,避免消息丢失

内容的提问来源于stack exchange,提问作者shorif2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:06:03