1. 程式人生 > 其它 >[喵咪MQ(2)]RabbitMQ單機模式使用

[喵咪MQ(2)]RabbitMQ單機模式使用

[喵咪MQ(2)]RabbitMQ單機模式使用

哈嘍!本週我們又見面了,今天呢我們接著說MQ軟體RabbitMQ的故事,在上小節以及成功的安裝了RabbitMQ也配置了開機啟動,那麼我們應該要開始的真正的接觸並且使用它來管理使用解決業務問題,請緊張的往下看…

附上:

喵了個咪的部落格:w-blog.cn

RabbitMQ官網 :http://www.rabbitmq.com/

1.使用者許可權體系

在RabbitMQ中提供了一套賬戶體系,賬戶體系圍繞著vhost進行展開,那麼vhost是什麼東西,一個比較相近的意思就是虛擬空間或名稱空間,每個使用者都可以分配一個vhost或多個vhost的操作許可權,只有擁有了操作許可權這個使用者才能管理這個vhost,在不同的vhost裡面佇列名稱可以重複,所以vhost可以用來區分開發測試環境,也就是說只要部署一套rabbitMQ就可以適用多個環境

接下來我們建立一個管理員賬戶讓我們可以進行後續的web介面管理時使用者登入,以及使用佇列時的使用者

#admin為新建的使用者,123456為密碼
rabbitmqctl add_user admin 123456  

#將使用者設定為管理員角色(管理員角色才能管理使用者哦)
rabbitmqctl  set_user_tags admin administrator 

2. 後臺管理介面

rabbitMQ提供一套功能全面的管理後臺程式,我們需要開啟web服務即可通過http://主機IP:15672 進行訪問(建立防火牆進行攔截,通過nginx限定IP訪問)

rabbitmq-plugins enable rabbitmq_management #啟用web外掛

rabbitmq-plugins disable rabbitmq_management #關閉web外掛

通過管理員登入就可以看到如下介面了

使用者管理可以看到現在的使用者列表,以及各個使用者可以操作的vhost

點選一個使用者可以控制權限分配新的vhost

Vhost 可以在使用者下面的選單進行建立

3.使用佇列

當我們單機模式準備工作完成後就可以開始使用RabbitMQ了,當然我們需要使用一門語言來開發並且需要用上SDK,RabbitMq官方提供了各類語言的擴充套件:http://www.rabbitmq.com/devtools.html

我們以php-amqplib為例子,使用composer進行安裝

require_once __DIR__ . '/vendor/autoload.php';
use PhpAmqpLibConnectionAMQPStreamConnection;
use PhpAmqpLibMessageAMQPMessage;

$config = array(
    'host'     => "localhost",
    'port'     => "5672",
    'user'     => "admin",
    'password' => "123456",
    'vhost'    => "/"
);

// 連結RabbitMQ
$connection = new AMQPStreamConnection($config['host'], $config['port'], $config['user'], $config['password'], $config['vhost']);
// 建立通道
$channel = $this->connection->channel();

// 宣告操作的佇列,不存在會去建立 如果寫入一個不存在的佇列會丟失結果(此操作耗時嚴重謹慎使用)
$this->channel->queue_declare("test_queue", false, true, false, false);

// 訊息轉換 有持續交付 和 非持續交付兩種
$message = new AMQPMessage("", array('delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT));
// 寫入一條訊息進入佇列
$channel->basic_publish($message, '', "test_queue");

// 讀取訊息處理 指定需要操作的佇列以及處理方法
$channel->basic_qos(null, 1, null);
$channel->basic_consume("test_queue", '', false, false, false, false, function ($msg) {
    $data = $msg->body;
    echo $data;
    // 告知訊息已經處理完成,只有告知訊息處理成功這條訊息才算被消費
    $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
});

// 迴圈處理
while (count($this->channel->callbacks)) {
    $this->channel->wait();
}

4 總結

本小節介紹了在單機場景下使用者的配置,web管理介面的使用,以及怎麼使用RabbitMQ來寫入訊息消費訊息,但是在我們面前還有一個比較重要的問題,如果RabbitMQ不幸宕機了怎麼辦呢?業務不就不能正常使用下去了嗎?不用擔心RabbitMQ也有一套靈活的叢集解決方案,在下一節我們將來一同學習有關叢集的一些支援,那麼今天的博文就到這裡,多謝大家的支援!

注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!