Yii开发消息推送后端消息队列对接方法

星墨小哥_2583

星墨小哥_2583

2026-08-18

331人浏览

原创

yii消息推送队列核心是异步解耦,用yii\queue\amqp_interop驱动rabbitmq,配置在console/config/main.php并启用bootstrap,任务类实现jobinterface且无副作用,控制器立即push并返回,消费者需cli常驻运行。

yii开发消息推送后端消息队列对接方法

Yii 开发中对接消息推送的后端队列,核心是把“通知逻辑”从主请求流中剥离,交由独立消费者异步执行。不靠轮询或长连接硬扛,而是用队列解耦生产与消费——用户提交、系统发信、第三方推送这三步不再串行阻塞。

选对驱动:优先用 yii\queue\amqp_interop

如果用 RabbitMQ,必须选 yii\queue\amqp_interop\Queue,不是旧版 amqp 驱动。后者已停更,PHP 8+ 和 RabbitMQ 3.10+ 下容易出现 FRAME_END missing、连接闪断等静默失败。配置只写在 console/config/main.php,且确保 'bootstrap' => ['queue'] 已启用。

关键参数示例:

  • host/port/user/password/vhost:一个都不能少,vhost 若非 /(如 myapp_vhost),必须显式写出
  • queueName:指实际队列名(如 sms_notify),不是交换机名;它会自动声明为 durable,但绑定需手动或靠交换机策略
  • ttr:单次任务执行超时秒数(如 60),超时即标记失败并重入队
  • attempts:该消息最多被投递几次(含首次),设为 3 不代表立刻重试,而是失败后约 1 秒再入队

定义推送任务类:轻量、可序列化、无副作用

任务类必须实现 \yii\queue\JobInterface,属性只存必要参数(如手机号、模板 ID、变量数组),不存对象实例或闭包。execute() 方法里专注调用 SDK 或封装好的推送服务。

例如短信任务:

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载
namespace common\jobs;<br>use yii\base\BaseObject;<br>use yii\queue\JobInterface;<br><br>class SmsNotifyJob extends BaseObject implements JobInterface<br>{<br>    public $phone;<br>    public $templateId;<br>    public $params = [];<br><br>    public function execute($queue)<br>    {<br>        // 复用已配置的短信组件<br>        \Yii::$app->sms->send($this->phone, $this->templateId, $this->params);<br>    }<br>}

注意:不要在 execute 里做数据库事务、文件写入或 session 操作;失败应抛异常,由队列框架自动重试或进失败队列。

前端响应与任务触发分离

控制器里收到请求后,立即推送任务并返回成功,不等结果:

  • 调用 Yii::$app->queue->push(new SmsNotifyJob(['phone' => '138xxxx', ...]))
  • 立刻返回 JSON:return ['code' => 0, 'msg' => '已提交发送,稍后查收']
  • 别在 AJAX 响应里依赖 setFlash()——session 提示前端根本收不到,提示内容得随 JSON 一起传

真实推送结果(成功/失败/送达率)需另建日志表或回调接口接收,不能靠队列执行返回值反推。

消费端部署:用 console 命令常驻运行

队列消费者不是 Web 请求触发的,必须通过 CLI 启动并保持运行:

  • 命令:php yii queue/listen(监听模式,推荐)或 php yii queue/run(单次拉取)
  • 线上务必用 Supervisor 或 systemd 管理进程,防止崩溃退出;加 --verbose 参数便于调试
  • 若用 Redis 驱动,注意 redisQueue 的 sleep 和 maxTtr 配置,避免空转耗 CPU 或任务卡死

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

yii框架适用场景 yii

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2323

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6090

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5446

10

PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

2930

22

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

2026.10.08

0

20

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

120

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

100

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

80

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

80

26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习