当前位置: 首页 > 后端技术 > PHP

RabbitMQ初体验

时间:2023-03-30 06:11:20 PHP

概述RabbitMQ是一个消息队列中间件。他提供了几乎涵盖所有语言的SDK和文档,简直太强大了。要了解有关RabbitMQ的更多信息,我建议阅读官方文档。http://www.rabbitmq.com/getst...消息队列有以下几个基本用途:异步处理,应用解耦,流量调峰,系统架构,消息队列的这些用途,我会在后续介绍有真实案例的文章。生产者创建一个RabbitMQ连接$connection=newAMQPStreamConnection('localhost',5672,'guest','guest');$channel=$connection->channel();类似于链接一个数据库的概念创建一个队列声明$channel->queue_declare('hello');创建多个队列与创建多个数据库相同,hello是队列的名称向队列创建一条消息$message=newAMQPMessage('HelloWorld!');向队列发布消息$channel->basic_publish($message,'','hello');hello就是上面创建的queue语句关闭链接$channel->close();$连接->关闭();释放资源消费者创建RabbitMQ链接$connection=newAMQPStreamConnection($channel->queue_declare('hello');创建多个队列和创建多个数据库一样,hello是队列名消费$channel->basic_consume('hello','',false,true,false,false,function($msg){echo'[x]Received',$msg->body,"\n";});通过回调处理消息队列functionwhile(count($channel->callbacks)){$channel->wait();}当没有消息时,挂起并保持等待状态关闭链接$channel->close();$conconnection->close();释放资源完成案例完成按钮是以上所有代码的收尾生产者$connection=newAMQPStreamConnection('localhost',5672,'guest','guest');$channel=$connection->channel();$channel->queue_declare('hello');$message=newAMQPMessage('HelloWorld!');$channel->basic_publish($message,'','hello');$channel->close();$连接->关闭();消费者$connection=newAMQPStreamConnection('localhost',5672,'guest','guest');$channel=$connection->channel();$channel->queue_declare('hello');//basic_consume方法第七个方法可以直接传入函数$channel->basic_consume('hello','',false,true,false,false,function($msg){echo'[x]Received',$msg->body,"\n";});while(count($channel->callbacks)){$channel->wait();}$channel->close();$connection->close();执行php{producer}.phpphp{consumer}.php其他RabbitMQ支持多线程处理消息队列,所以可以开启多个消费者执行消息队列中的任务。你可以像我一样如果觉得安装RabbitMQ之类的东西很麻烦,那你看看我的Laravel队列是怎么玩的。https://segmentfault.com/a/11...感谢阅读我的文章,纯手写的文章,官方文档给新手造成很多误区,所以整理一下这个文档,尽量避免新手“入坑”坑。如果您对文章有任何疑问或疑问,请在评论区留言。谢谢