PHP AMQP文檔說明
無論從數(shù)據(jù)傳輸或計(jì)算效率方面來說,本文將通過闡述php amqp,來看其如何更好地解決這些問題。
起步
channel();
此處我們可以看到,在我們使用php amqp前,我們首先需要安裝PhpAmqpLib。安裝之后,以代碼化方式即可登陸 message queue。
工作隊(duì)列
這里,我們將會舉一反三。 假設(shè)有一個(gè)后臺耗時(shí)任務(wù),這個(gè)任務(wù)將會把文件中URL轉(zhuǎn)換成PDF,我們可以通過以下方式進(jìn)行解決:
queue_declare('task_queue', false, true, false, false); $msg = new AMQPMessage($url); $channel->basic_publish($msg, '', 'task_queue'); echo " [x] Sent ", $url, "\n";
這里我們可以通過channel的基本參數(shù),以basic_publish
的方式進(jìn)行文件的發(fā)布。同時(shí),我們注意到“task_queue”是一個(gè)持久化的隊(duì)列,這樣一來,即使RabbitMQ服務(wù)器關(guān)閉或重啟,其仍然會保留受到的消息。
發(fā)布者/訂閱者
現(xiàn)在,假設(shè)我們需要通過訂閱的方式來獲取pdf文件。則可以通過以下代碼進(jìn)行解決:
exchange_declare('pdfs', 'fanout', false, false, false); list($queue_name, ,) = $channel->queue_declare('', false, false, true, false); $channel->queue_bind($queue_name, 'pdfs'); echo ' [*] Waiting for logs. To exit press CTRL+C', "\n"; $callback = function ($msg) { echo ' [x] ', $msg->body, "\n"; }; $channel->basic_consume($queue_name, '', false, true, false, false, $callback); while (count($channel->callbacks)) { $channel->wait(); }
這里通過通過queue_bind
來講隊(duì)列和模式綁定起來。同時(shí),配置訂閱者,以此迭代的方式,來開辟文件下載服務(wù)。當(dāng)然,這里也僅僅是展示出關(guān)注于如何使用php amqp, 在實(shí)際中應(yīng)用這些思維,還需要根據(jù)自己的實(shí)際需要去考慮使用。
總結(jié)
在此之上,我們可以看出,php amqp依賴于消息隊(duì)列的一種高效的機(jī)制,同時(shí)以消息的方式提高了系統(tǒng)的可用性(并發(fā))。但同時(shí),因?yàn)槭褂昧讼㈥?duì)列,一般會在保證處理單元之間獨(dú)立性的同時(shí),增加了系統(tǒng)整體的耦合。在使用消息隊(duì)列之前,一定需要好好考慮其應(yīng)用場合,才能充分發(fā)揮php amqp的作用。