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

centos下安装RabbmitMQ+PHPRabbmitMQ应用

时间:2023-03-29 18:35:57 PHP

你可能在想数据分发、非阻塞作业或者消息推送。或者你想做发布/订阅、异步任务、工作队列。所有这些模式都是消息队列的一部分。1、安装RabbmitMQwgethttps://www.rabbitmq.com/releases/rabbitmq-server/v3.6.8/rabbitmq-server-3.6.8-1.el6.noarch.rpm获取rpm,会发现缺少依赖安装安装时依赖erlangwgethttps://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpmrpm-Uvherlang-solutions-1.0-1.noarch.rpmyuminstallerlang注意不要直接安装yum来自epel的源码,epel源码的erlang版本太低。安装依赖socatyuminstallsocat。最后一个rpm-Uvhrabbitmq-server-3.6.8-1.el6.noarch.rpm2.php是RabbmitMQ库{"require":{"php-amqplib/php-amqplib":"2.6.*"}}comoserinstall3.php+RabbmitMQhelloworld//send.phprequire_once__DIR__.'/vendor/autoload.php';使用PhpAmqpLib\Connection\AMQPStreamConnection;使用PhpAmqpLib\Message\AMQPMessage;$connection=newAMQPStreamConnection('localhost',5672,'guest','guest');$channel=$connection->channel();$channel->queue_declare('你好',false,false,false,false);$msg=newAMQPMessage('HelloWorld!');$channel->basic_publish($msg,'','hello');//向hello频道发送消息echo"[x]Sent'HelloWorld!'\n";$陈nel->close();$connection->close();//receive.phprequire_once__DIR__.'/vendor/autoload.php';usePhpAmqpLib\Connection\AMQPStreamConnection;$connection=newAMQPStreamConnection('localhost',5672,'guest','guest');$channel=$connection->channel();$channel->queue_declare('你好',false,false,false,false);echo'[*]等待消息。ToexitpressCTRL+C',"\n";$callback=function($msg){echo"[x]Received",$msg->body,"\n";};//从hello频道接收消息$channel->basic_consume('hello','',false,true,false,false,$callback);while(count($channel->callbacks)){$channel->wait();}4.RunfirstrunrabbmitMQserverservicerabbmitmq-serverstartsuspendreceive.php接收消息处理phpreceive.phpsendmessage##openanotherwindow执行phpsend.php上面的代码构建了一个简单的消息队列,消息是从send.php产生的(p)进入队列,交给消费者(c)注意:当命令行窗口关闭时,receive。php进程将结束。这时候就需要使用supervisor在后台运行receive.php脚本。这部分代码可以重写,作为一个简单的异步队列Task场景,但是在高并发和高可用的需求下,需要做一些额外的处理。在后面的文章中,我会讲到rabbmitMQ的竞争消费模式和superverisor的使用。