php 消息队列例子

admin2个月前 (04-15)it知识219
  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知识

相关文章

技术与艺术的融合:创造无比魅力的结合

在人类文明的发展史上,技术与艺术如同一对形影不离的伙伴,共同推动了人类社会的进步。随着科技的飞速发展,技术与艺术的融合愈发紧密,为我们揭示了一个全新的视角,让我们重新审视这两股强大的力量。在当今数字化...

优美程序是怎样的

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

拖延症重度患者怎样自救

对于拖延症的重度患者,自救的关键在于以下几点:识别并克服拖延的借口。拖延常常因为我们害怕、不确定、不想不舒服而找到各种借口。我们必须识破这些借口,并对自己说:“如果我拖延,后果将不堪设想。”制定清晰的...

敏捷开发

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。换言之,就是把一个大项目分为多个相互联系,但也可...

如何高效学习

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

故事分解结构

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

发表评论

访客

看不清,换一张

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