日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP中使用ActiveMQ实现消息队列

發布時間:2025/3/21 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP中使用ActiveMQ实现消息队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

PHP中使用ActiveMQ實現消息隊列前面我們已經學了如何部署ActiveMQ, 我們知道通過ActiveMQ的一個管理后臺可以查看任務隊列。今天 這里寫圖片描述 用PHP來操作ActiveMQ,我們可以借助一個第三方擴展。 下載:composer require fusesource/stomp-php:2.0.* 1 然后新建test.php:<?phprequire __DIR__.'/vendor/autoload.php'; //引入自動加載的文件$connect = new \FuseSource\Stomp\Stomp('tcp://10.211.55.13/:61613'); $connect->connect();$userId = 1001; $result = $connect->send('email',$userId); //比如發郵件 var_dump($result);這里寫圖片描述 發送消息成功,打印bool(true)我們在ActiveMQ自帶的管理后臺查看,確實有一個名為”email”的隊列。 這里寫圖片描述上面我們發送的一個id,我們還可以發送json數據。$data = array('id'=>1001,'email'=>'110@qq.com','content'=>'test'); $result = $connect->send('email',json_encode($data)); 1 2 我們在MQ后臺可以查看消息詳細 這里寫圖片描述上面的代碼到這里,還不夠完美。如果我們服務器重啟了activemq,沒有處理的消息會丟失。 這個時候我們需要用到send()方法的第三個參數。//消息持久化 persistent為true,字符串的'true' $result = $connect->send('email',json_encode($data),array('persistent'=>'true')); 1 2 前面我們完成了『發送』 給mq服務器發送消息(email消息)。 那么在mq的隊列中的任務,又是怎么處理的呢?<?phprequire __DIR__.'/vendor/autoload.php'; //引入自動加載的文件$connect = new \FuseSource\Stomp\Stomp('tcp://10.211.55.13/:61613'); $connect->connect();//訂閱隊列消息 $connect->subscribe('email');if ($connect->hasFrameToRead()){$frame = $connect->readFrame();print_r($frame); }在mq服務端,訂閱(監聽)隊列消息。 在服務端是命令行下執行:php mqServer.php 如果有沒有處理的消息,可以讀取出來,打印結果如下:FuseSource\Stomp\Frame Object ([command] => MESSAGE[headers] => Array([expires] => 0[destination] => /queue/email[priority] => 4[message-id] => ID:localhost.localdomain-38488-1488196907415-3:2:-1:1:1[timestamp] => 1489477647931)[body] => {"id":1001,"email":"110@qq.com","content":"test"} )body就把我們發送的內容讀取出來了。我們循環讀取(死循環)一直等待新消息:do{if ($connect->hasFrameToRead()){$frame = $connect->readFrame();print_r($frame->body);} } while (true); 1 2 3 4 5 6 處理消息之后(在發送郵件等業務完成之后),要通知mq我處理了該條消息了if ($connect->hasFrameToRead()){$frame = $connect->readFrame();//print_r($frame->body);//做業務邏輯//具體發送郵件的業務//send email//最后通知mq,我們已經處理了該條消息$connect->ack($frame);}我們還可以在優化一下代碼,解決死循環,控制循環(這里是一種方案演示)do{//會等待,直到有可用消息,才執行后面代碼if ($connect->hasFrameToRead()){$frame = $connect->readFrame();//print_r($frame->body);//做業務邏輯//具體發送郵件的業務//send emailsleep(2); //模擬延時//最后通知mq,我們已經處理了該條消息$connect->ack($frame);}//控制循環$next = true;if (file_exists(__DIR__.'/stop')){//如果有名為stop的一個文件//就不循環了$next = false;} } while ($next);

更多內容請關注我的訂閱號:

轉載于:https://my.oschina.net/yonghan/blog/1648615

總結

以上是生活随笔為你收集整理的PHP中使用ActiveMQ实现消息队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。