1. 程式人生 > >php amqp rabbitmq 介紹和使用

php amqp rabbitmq 介紹和使用

prot con sage 設置 任務 系列 消息通道 程序 消息隊列

  AMQP,即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,為面向消息的中間件設計。基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不同產品,不同的開發語言等條件的限制。Erlang中的實現有 RabbitMQ等。

  RabbitMQ,是一個由erlang開發的AMQP(Advanved Message Queue)的開源實現。

  幾個概念說明:

Broker:簡單來說就是消息隊列服務器實體。
Exchange:消息交換機,它指定消息按什麽規則,路由到哪個隊列。
Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。
Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。
Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。
vhost:虛擬主機,一個broker裏可以開設多個vhost,用作不同用戶的權限分離。
producer:消息生產者,就是投遞消息的程序。
consumer:消息消費者,就是接受消息的程序。
channel:消息通道,在客戶端的每個連接裏,可建立多個channel,每個channel代表一個會話任務。

  消息隊列的使用過程大概如下:

(1)客戶端連接到消息隊列服務器,打開一個channel。
(2)客戶端聲明一個exchange,並設置相關屬性。
(3)客戶端聲明一個queue,並設置相關屬性。
(4)客戶端使用routing key,在exchange和queue之間建立好綁定關系。
(5)客戶端投遞消息到exchange。
(6)exchange接收到消息後,將消息投遞到一個或多個隊列裏

  在PHP中,amqp擴展提供了幾個類和其中的一系列方法來幫助我們接受和發送消息

功能類

AMQPChannel 一個Connection連接上可以建立多個channel,可以理解為邏輯上的連接
AMQPConnection 指物理的連接,一個client與一個server之間有一個連接
AMQPEnvelope 消息包
AMQPExchange 消息交換機
AMQPQueue 隊列

異常類

AMQPException
AMQPQueueException
AMQPConnectionException
AMQPChannelException
AMQPExchangeException

創建連接

1 $connection = new AMQPConnection(array(
2     ‘host‘ => ‘example.host‘,
3     ‘vhost‘ => ‘/‘,
4     ‘port‘ => 5763,
5     ‘login‘ => ‘user‘,
6     ‘password‘ => ‘password‘
7 ));

創建channel

1 $channel = new AMQPChannel($connection);

創建交換機

1 $exchange = new AMQPExchange($channel);
2 $exchange->setName($e_name); 
3 $exchange->setType(AMQP_EX_TYPE_DIRECT); //direct類型 
4 $exchange->setFlags(AMQP_DURABLE); //持久化

php amqp rabbitmq 介紹和使用