rabttmq php延遲訊息 相關代碼(網上沒搜到自己琢磨著弄好了)

來源:互聯網
上載者:User

標籤:rabbitmq   延遲訊息   

前言:
  作為一個營運人員不背鍋,誰背呢!


本文:

  網上都是2種辦法去實現,第二種我就不說了,要升級rabbitmq 別人也說什麼什麼不行

 

  好吧~今天按照網上說的 TTL + DLX 的方式來實現 延遲訊息(java的 python的相關代碼都有 就是沒有 拍huang片的!!!!)


  擼代碼咯:


  1.首先得要建立一個新的隊列 新的交換器來存放延遲訊息 並且設定新的隊列訊息ttl到期後 轉寄的 交換器 和 routeing key (我的老的交換器為e_test  key 為k1)


主要代碼為:

function mqInitYanChi($e_name,$q_name,$k_route,$conn)

{

//建立串連和channel 

  

$channel = new AMQPChannel($conn); 

//建立交換器對象    

$ex = new AMQPExchange($channel);   

$ex->setName($e_name); 

$ex->setType(AMQP_EX_TYPE_DIRECT); //必須設定

$ex->setFlags(AMQP_DURABLE); //持久化 可以不必選

echo "exchange status:".$ex->declareExchange().‘\n‘;


//綁定交換器與隊列,並指定路由鍵 

//建立隊列    

$q = new AMQPQueue($channel); 

$q->setName($q_name);   

#$q->setFlags(AMQP_DURABLE); //持久化  

$q->setArgument(‘x-dead-letter-exchange‘,‘e_test‘); //設定ttl逾時轉寄到e_test

$q->setArgument(‘x-dead-letter-routing-key‘,‘k1‘); //設定ttl逾時轉寄的key為k1

echo "Message Total:".$q->declare()."\n";   


echo ‘Queue Bind: ‘.$q->bind($e_name, $k_route)."\n"; 


return $ex;

}


  2.也就是訊息發送的送時候設定ttl就行了 其實很簡單


主要代碼:


$message = "測試延遲!"; 


$ex1=mqInitYanChi(‘e_yanchi‘,‘q_yanchi‘,‘k1‘,$conn);

$attributes = array(‘expiration‘ => 5000); //設定為5秒

$ex1->publish($message,‘k1‘,‘1‘,$attributes);




就這樣 就可以發送到q_yanchi隊列裡邊的 訊息 五秒後到期  轉寄到 綁定了 e_test的交換器 routing-key 為k1的隊列中去了  


要下班了 寫得有些粗糙。。有問題可以留言
 

rabttmq php延遲訊息 相關代碼(網上沒搜到自己琢磨著弄好了)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.