RabiitMQ命令使用

$cnn = news AMQPStreamConnection();
//建立mq之間的連接 (host:ip,port:端口,user:賬戶,pwd:密碼) 

$channel = $cnn->channel(); //創建一個信道 AMQP的命令都是通過信道發送出去的

$channel->exchange_declare(); 
//創建交換機 (exchange:交換機名,type:交換機類型,passive:只判斷不創建,durable:重啓重建,auto_delete:無用自動銷燬)

$tale = new AMQPTable(); 
$tale->set('x-dead-letter-exchange', '交換機名稱');
$tale->set('x-dead-letter-routing-key','交換機名稱');
$tale->set('x-message-ttl',15000); //隊列存活時間
//表示過期後由哪個交換機處理

$channel->queue_declare('cache_queue',false,true,false,false,false,$tale); //聲明隊列
//1.queue 是隊列的名字.而存在默認值的意思是.你可以創建一個不重複名稱的一個臨時隊列.
//2.passive 只查詢不創建.如果爲true,如果存在這個隊列,則會返回隊列的信息.如果不存在這個隊列..則會拋異常
//3.durable 重啓後是否會重建這個隊列
//4.exclusive 排他隊列,如果你希望創建一個隊列,並且只有你當前這個程序(或進程)進行消費處理.不希望別的客戶端讀取到這個隊列.用這個方法甚好.而同時如果當進程斷開連接.這個隊列也會被銷燬.不管是否設置了持久化或者自動刪除.
//5.auto_delete  自動刪除
//6.nowait 不等待處理結果
//7.arguments 額外的參數

$channel->queue_bind('cache_queue', 'cache_exchange','cache_exchange'); //綁定交換機
//1.queue 隊列名
//2.exchange 交換機名
//3.routing_key 路由名

$msg = new AMQPMessage("消息內容",['配置項'=>'配置值']); //創建消息

$channel->basic_publish($msg,'cache_exchange','cache_exchange'); //發送消息
//1.msg 消息對象,創建的消息
//2.exchange 交換機
//3.routing_key 路由

//回調函數
$callback = function ($msg){ 
    //在這裏可以添加消費消息的具體邏輯 
    $msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
    //根據消息的delivery_info['channel']找到通道,並調用通道的basic_ack方法發送消息的確認內容.
} 

$channel->basic_qos(); //預取方法

$channel->basic_consume(); //只有consumer已經處理並確認了上一條message時queue才分派新的message給它
//1.隊列名稱
//2.consumer_tag 消費者標籤
//3.no_local false 這個功能屬於AMPQ的標準,但是rabbitMq並沒有做實現
//4.no_ack false 收到消息後,是否不需要回復確認即被認爲是被消費
//5.exclusive false 排他消費者,即這個隊列只能有一個消費者消費,適用於人物不允許進行並打處理的情況下,比如系統對接
//6.callback 回調函數

//判斷是否存在回調函數
while(count($channel->callbacks)) {
    // 此處爲執行回調函數
    $channel->wait();
}

$channel->close(); //關閉通道
$cnn->close(); //關閉連接

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章