AMQP,即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。基於此協議的客戶端與消息中間件可傳遞消息,並不受客戶端/中間件不一樣產品,不一樣的開發語言等條件的限制。Erlang中的實現有 RabbitMQ等。服務器
RabbitMQ,是一個由erlang開發的AMQP(Advanved Message Queue)的開源實現。ui
幾個概念說明:spa
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擴展提供了幾個類和其中的一系列方法來幫助咱們接受和發送消息code
功能類server
AMQPChannel 一個Connection鏈接上能夠創建多個channel,能夠理解爲邏輯上的鏈接
AMQPConnection 指物理的鏈接,一個client與一個server之間有一個鏈接
AMQPEnvelope 消息包
AMQPExchange 消息交換機
AMQPQueue 隊列中間件
異常類blog
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); //持久化