PHP AMQP Extension App
Weekend break, idle to study the AMQP PHP extension, took a day to debug good
Advanced Message Queuing Protocol (AMQP) is an application-layer protocol specification used by asynchronous messaging. As a line-layer protocol, rather than an API (such as JMS), AMQP clients can send and receive information arbitrarily regardless of the source of the message. Now, quite a few servers and clients of different platforms can be put into use
My AMQP server is using RabbitMQ, RabbitMQ is installed on the Internet a lot.
The main point is PHP extension php-amqp, I use the latest amqp-1.0.1
The documents are old and new doped together so it took a long time to finish.
First, the process is CLIENT-AMQP server-client
The client on the left sends a message to the client on the right, the process:
1, get conection
2, Get Channel
3, define Exchange,queue
4, use a routingkey to binding the queue to an exchange
5, by specifying an exchange and a routingkey to send messages to the corresponding queue,
6, the receiver also acquires the connection at the time of receiving, then acquires the channel, then assigns a queue directly to the queue that it cares about, and it does not care about exchange,routingkey and how it is binding. Go to the corresponding queue and pick up the message, OK?
The following is the implementation of PHP:
Production message:
' localhost ', ' port ' = ' 5672 ', ' login ' = ' guest ', ' password ' = ' guest '; $conn = new Amqpconnection ($conn _args) if ($conn->connect ()) {echo "established a connection to the broker \ n";} else {echo "Cannot connect to the broker \ n";} Your message $message = Json_encode (Array (' Hello world! ', ' php ', ' C + + '));//Create Channel$channel = new Amqpchannel ($conn);// Create Exchange $ex = new Amqpexchange ($channel); $ex->setname (' Exchange ');//Create name $ex->settype (amqp_ex_type_direct) ; $ex->setflags (amqp_durable | Amqp_autodelete); echo "Exchange Status:". $ex->declare (); echo "\ n";//Create queue $q = new Amqpqueue ($channel);//Set queue name Add $q->setname (' queue ') if it does not exist; $q->setflags (amqp_durable | Amqp_autodelete); echo "Queue status:". $q->declare (); echo "\ n"; Echo ' queue bind: '. $q->bind (' Exchange ', ' Route.key ');//bind your queue to Routingkeyecho "\ n"; $channel->starttransaction (); echo "Send:". $ex->publish ($message, ' Route.key '); Send your message through the development Routingkey $channel->committransaction (); $conn->disconnECT ();? >
Consumer of the Receiving party
' localhost ', ' port ' = ' 5672 ', ' login ' = ' guest ', ' password ' = ' guest ' , ' vhost ' + '/'); $conn = new Amqpco Nnection ($conn _args), $conn->connect (), $channel = new Amqpchannel ($conn); $q = new Amqpqueue ($channel); $q SetName (' queue2 '); $q->setflags (amqp_durable | Amqp_autodelete); echo "Queue status:". $q->declare (); echo "==========\n"; $messages = $q->get (amqp_autoack);p Rint_r ($messages->getbody ()); echo "\ n";//Disconnect$conn->disconnect ( );? >
I am a beginner of the message queue knowledge.
Don't know the pros and cons of Linux Message Queuing and AMQP
I use PHP's sysvmsg function to execute while loop can suspend on the server, listen to messages in real-time message queue, the message is taken, memory does not rise
In the AMQP while loop monitoring even if the non-message memory will be more and more high, and eventually lead to PHP using insufficient memory and error.
It seems to be a lot more exchange and learning.