RabbitMQ 初體驗
阿新 • • 發佈:2018-11-24
概述
RabbitMQ是一款訊息佇列中介軟體。他提供了幾乎覆蓋所有語言的SDK與文件,簡直強大的不的了。要詳細的去了解學習RabbitMQ,我建議還是看官方文件吧。 http://www.rabbitmq.com/getst...
訊息佇列有以下幾個基本用途
- 非同步處理
- 應用解耦
- 流量削峰
- 系統架構
訊息佇列的這幾個用途我會在後續的文章以真實案例去表述
生產者
建立RabbitMQ連結
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest'); $channel = $connection->channel ();
與連結一個數據庫概念差不多
建立一個佇列宣告
$channel->queue_declare ('hello');
建立多個佇列與建立多個數據庫一樣,hello則是佇列名
建立一條訊息到佇列
$message = new AMQPMessage('Hello World!');
釋出訊息到佇列
$channel->basic_publish ($message, '', 'hello');
hello 是上面建立的佇列宣告
關閉連結
$channel->close (); $connection->close ();
釋放資源
消費者
建立RabbitMQ連結
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel ();
與連結一個數據庫概念差不多
建立一個佇列宣告
$channel->queue_declare ('hello');
建立多個佇列與建立多個數據庫一樣,hello則是佇列名
消費
$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 ();
釋放資源
完整的案例
完整的按鈕則是上面所有程式碼的整理
生產者
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel ();
$channel->queue_declare ('hello');
$message = new AMQPMessage('Hello World!');
$channel->basic_publish ($message, '', 'hello');
$channel->close ();
$connection->close ();
消費者
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel ();
$channel->queue_declare ('hello');
// basic_consume 方法第7個方法可以直接傳入函式
$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 {生產者}.php
php {消費者}.php
其他
RabbitMQ支援多執行緒處理訊息佇列,所有你可以開啟多個消費者去執行訊息佇列內的任務。你可以像我這樣
如果你感覺RabbitMQ這玩意還需要安裝啥的感覺特麻煩,那你可以看下我的Laravel佇列如何簡單的玩起來。
https://segmentfault.com/a/11...
致謝
感謝你看完我這篇文章,純手記的一篇文章,官方文件對新手的理解造成很多的誤解,所以整理此文件,儘量避免新手“進”坑吧。對文章有什麼問題或疑問,歡迎在評論區留言。謝謝
原文地址:https://segmentfault.com/a/1190000015482888