php 消息队列例子

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

相关文章

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

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

湖边

湖边,一片静谧的美好。清晨的阳光洒在湖面上,波光粼粼,让人心旷神怡。湖上的荷叶轻轻摇曳,荷花争奇斗艳,仿佛在向人们展示着它们的美丽。湖边的柳树依依,芦苇丛生,形成了一道道天然的屏障,让人感到一种隐秘的...

敏捷开发

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

如何高效学习

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

如何写文章

过程,需要一定的技巧和准备。以下是一些写文章的步骤和技巧:确定文章的主题和目的:在开始写作之前,您需要明确文章的主题和目的。这有助于您确定文章的重点和方向。研究和收集信息:在开始写作之前,进行一些研究...

马斯洛理论

生理需求是最低层次的需求,包括人类维持自身生存的最基本要求,包括饥、渴、衣、住、性、健康方面的需求。安全需求包括两个层次,一是归属的需要,即人都有一种归属于一个群体的感情,希望成为群体中的一员,并相互...

发表评论

访客

看不清,换一张

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