php 消息队列例子

  1. RabbitMQ方案

  • 安装扩展:需先安装amqp扩展,通过pecl或源码编译安装‌

  • 生产者示例:

$connection = new AMQPConnection(['host'=>'127.0.0.1']);$channel = $connection->channel();$channel->queue_declare('hello');$channel->basic_publish(new AMQPMessage('Hello'), '', 'hello');
  • 消费者示例:

$callback = function($msg) { echo $msg->body; };$channel->basic_consume('hello', '', false, true, false, false, $callback);while(count($channel->callbacks)) { $channel->wait(); }

注意:RabbitMQ涉及交换机、路由等概念,学习曲线较陡‌

  1. ThinkPHP队列方案

  • 常驻消费命令:

sudo nohup php think queue:work --daemon --queue createAdminLogQueue > out.file &
  • 代码示例:

Queue::push('app\hook\adminLog\job\AdminLogCreateQueueJob', $data, 'createAdminLogQueue');

适合ThinkPHP框架项目使用‌2

  1. Redis方案

  • 基础实现:

$redis = new Redis();$redis->connect('127.0.0.1');// 入队  $redis->lpush('queue', json_encode(['task'=>'updateOrder','params'=>[...]]));// 出队$task = $redis->rpop('queue');

适合需要轻量级队列的场景‌56

  1. 纯PHP数组方案

$queue = new SplQueue();$queue->enqueue('task1'); // 入队  $task = $queue->dequeue(); // 出队

适用于单机简单场景‌

典型应用场景‌:

  • 异步处理(如日志记录)‌

  • 系统解耦(如订单与库存系统)‌

  • 流量削峰(如秒杀活动)‌

  • 数据冗余(保证重要操作必执行)‌

注意事项‌:

  1. 消息队列会降低系统可用性(依赖中间件)‌

  2. 需处理重复消费问题(通过唯一ID或幂等操作)‌

  3. 分布式环境要考虑消息顺序和一致性‌



标签:

相关文章

当前人工智能技术发展水平

一、生成能力:突破人类效率边界‌文本与跨模态生成‌3秒生成专业级商业计划书,实时翻译114种语言(含8种中国方言);AI工具(如Manus)可解压文件、筛选简历并导出报告,实现异步任务处理‌;图像生成...

后端懒加载示例(以分页加载数据为例)

场景描述‌假设有一个博客系统,每页显示10篇文章,用户滚动到底部时加载下一页的文章。‌前端请求代码(使用Fetch API)let page = 1; const&nb...

前端状态管理器

前端状态管理器是用于管理应用数据状态的核心工具,主要解决组件间状态共享、数据一致性等问题。以下是主流方案和技术要点:一、核心概念‌状态类型‌本地状态(组件内部)全局状态(跨组件共享)服务端状态(异步数...

🍂穿越时空的呼唤:从繁华到荒芜,那些被遗忘的故事🌈

### 🌟序章:初遇延秋门🌟在那个秋日黄昏,我第一次踏入了延秋门。古旧的石板路,在夕阳下泛着金色的光,仿佛每一块石头都在诉说着过往的故事。这里曾经是城市的心脏,每到夜晚,家家户户的灯火就像夜空中最亮的...

html + css的基础知识

HTML 和 CSS 是构建网页的两大基础技术,它们共同构成了网页的结构与样式。HTML(超文本标记语言)HTML 是网页的骨架,用于定义网页的内容和结构。它通过一系列标签来描述网页中的元素,如标题、...

html5标签

HTML5 引入了许多新的语义化标签和功能特性,旨在提升网页结构的清晰度、可访问性和 SEO 效果。以下是 HTML5 中一些核心新增标签及其用途:1. 语义化结构标签这些标签用于定义网页的不同部分,...