php 消息队列例子

admin8个月前 (04-15)it知识490
  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. 分布式环境要考虑消息顺序和一致性‌



标签: 分享IT知识

相关文章

优美程序是怎样的

程序优美是一个主观的概念,每个人可能会有不同的看法。然而,以下是一些可能导致程序优美的因素:简洁性:优美的程序应该尽可能地简洁明了。这意味着应该使用尽可能少的数据结构和算法,以及尽可能简单的代码。可读...

关于夏天

在一个炎热的午后,阳光穿过树叶的缝隙,洒在公园的草地上。空气中弥漫着夏日的气息,那是炎热中夹杂着淡淡的花香,还有草地的清新味道。在这个充满活力的季节,夏天以其独特的方式展示着它的魅力。夏天是一个充满色...

夏天的台风

夏天,是一个充满活力和生命力的季节,但同时也伴随着台风的出现。每年的这个时期,台风如同一股强大的自然力量,给人们的生命和财产带来了一定的威胁。在台风的肆虐中,可以看到大自然的威力与无情。台风带来的强风...

如何高效学习

努力和技巧的能力。以下是一些可以帮助你高效学习的方法:制定学习计划:制定一个清晰的学习计划,包括学习内容和时间表,有助于你更好地组织自己的学习并提高学习效率。创造良好的学习环境:在学习时,尽可能避免干...

双因素理论

双因素理论是美国心理学家弗雷德里克·赫兹伯格(Frederick·Herzberg)于20世纪50年代后期提出的,这一理论的研究重点是组织中的人与工作的关系问题。双因素理论包括保健因素和激励因素。保健...

故事分解结构

故事分解结构是一种用于分析、设计和编写故事的方法,它可以将故事分解为不同的层次,从而更好地理解故事的内在逻辑和结构。下面是故事分解结构的详细解释:节拍(beat):是故事的最小单位,包含动作和反应两个...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。