php 消息队列例子

admin5个月前 (04-15)it知识343
  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):是故事的最小单位,包含动作和反应两个...

如果百度不收录,如何提高网站人气

假设你是一个新兴的瑜伽品牌,你创建了一个网站来宣传你的瑜伽课程和品牌。然而,你发现百度搜索引擎并没有收录你的网站,这导致你的网站流量和人气较低。以下是你可以采取的一些策略来提高网站人气:优化网站结构:...

暴风雨

暴风雨来临之前,天空中弥漫着一股压抑的气息。乌云密布,仿佛覆盖着一片灰暗的帷幕,将整个天地都笼罩在一片阴沉的氛围中。狂风大作,吹拂着路上的尘土和枝叶,让人感到一阵阵的凉意。突然,一声炸雷打破了寂静,紧...

发表评论

访客

看不清,换一张

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