1. 程式人生 > >RabbitMQ 初體驗

RabbitMQ 初體驗

概述

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