php amqp rabbitmq 介紹和使用

  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); //持久化
相關文章
相關標籤/搜索