亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

TP5使用RabbitMQ實現(xiàn)消息隊列的項目實踐

瀏覽:117日期:2022-06-13 18:06:39
目錄1、安裝擴展2、自定義命令3、rabbitmq服務(wù)端4、發(fā)送端5、驗證

在使用 RabbitMQ 之前,你要安裝好 RabbitMQ 服務(wù),具體安裝方法可以參考 windows下安裝RabbitMQ

1、安裝擴展

進入TP5 更目錄下,輸入命令安裝:

composer require php-amqplib/php-amqplib2、自定義命令

TP5 的自定義命令,這里也簡單說下。

第一步:

創(chuàng)建命令類文件,新建 application/api/command/Test.php。

<?phpnamespace app\api\command;use think\console\Command;use think\console\Input;use think\console\Output;/**?* 自定義命令測試?*/class Test extends Command{?? ?/**?? ? * 配置?? ? */?? ?protected function configure()? ? {? ? ?? ?// 設(shè)置命令的名稱和描述? ? ? ? $this->setName('test')->setDescription('這是一個測試命令');? ? }? ? /**? ? ?* 執(zhí)行? ? ?*/? ? protected function execute(Input $input, Output $output)? ? {? ? ? ? $output->writeln('測試命令');? ? }}

這個文件定義了一個叫test的命令,備注為 這是一個測試命令,執(zhí)行命令會輸出:test command。

第二步:

配置 command.php文件,在 application/command.php文件中添加命令。

<?phpreturn [?? ?'app\api\command\Test',];

第三步:

測試命令,在項目根目錄下輸入命令:

php think test

回車運行之后輸出:

test command

到這里,自定義命令就結(jié)束了,test命令就自定義成功了。

3、rabbitmq服務(wù)端

下來我們自定義 RabbitMQ 啟動命令,守護進程運行,啟動 rabbirmq 服務(wù)端接收消息。在 application/api/command 目錄下,新建 Ramq.php 文件,在執(zhí)行命令的方法中,調(diào)用 RabbitMQ 啟動守護進程方法即可。

<?phpnamespace app\api\command;use PhpAmqpLib\Connection\AMQPStreamConnection;use think\console\Command;use think\console\Input;use think\console\Output;/**?* RabbitMq 啟動命令?*/class Ramq extends Command{?? ?protected $consumerTag = 'customer';? ? protected $exchange = 'xcuser';? ? protected $queue = 'xcmsg';?? ?protected function configure()? ? {? ? ? ? $this->setName('ramq')->setDescription('rabbitmq');? ? }? ? protected function execute(Input $input, Output $output)? ? {? ? ? ? $output->writeln('消息隊列開始');? ? ? ? $this->start();? ? ? ? // 指令輸出? ? ? ? $output->writeln('消費隊列結(jié)束');? ? }? ? /**? ? ?* 關(guān)閉? ? ?*/? ? function shutdown($channel, $connection)? ? {? ? ? ? $channel->close();? ? ? ? $connection->close();? ? }? ? /**? ? ?* 回調(diào)處理信息? ? ?*/? ? function process_message($message)? ? {? ? ? ? if ($message->body !== 'quit') {? ? ? ? ? ? echo $message->body;? ? ? ? }? ? ? ? //手動應(yīng)答? ? ? ? $message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);? ? ? ? if ($message->body === 'quit') {? ? ? ? ? ? $message->delivery_info['channel']->basic_cancel($message->delivery_info['consumer_tag']);? ? ? ? }? ? }? ? /**? ? ?* 啟動 守護進程運行? ? ?*/? ? public function start()? ? {? ? ? ? $host = '127.0.0.1';? ? ? ? $port = 5672;? ? ? ? $user = 'guest';? ? ? ? $pwd = 'guest';? ? ? ? $vhost = '/';? ? ? ? $connection = new AMQPStreamConnection($host, $port, $user, $pwd, $vhost);? ? ? ? $channel = $connection->channel();? ? ? ? $channel->queue_declare($this->queue, false, true, false, false);? ? ? ? $channel->exchange_declare($this->exchange, 'direct', false, true, false);? ? ? ? $channel->queue_bind($this->queue, $this->exchange);? ? ? ? $channel->basic_consume($this->queue, $this->consumerTag, false, false, false, false, array($this, 'process_message'));? ? ? ? register_shutdown_function(array($this, 'shutdown'), $channel, $connection);? ? ? ? while (count($channel->callbacks)) {? ? ? ? ? ? $channel->wait();? ? ? ? }? ? }}

在application/command.php文件中,添加rabbitmq自定義命令。

return [ 'app\api\command\Ramq',// rabbitmq];4、發(fā)送端

最后,我們再寫發(fā)送消息的控制器,實現(xiàn)消息隊列,具體代碼如下:

<?phpnamespace app\api\controller;use PhpAmqpLib\Connection\AMQPStreamConnection;use PhpAmqpLib\Message\AMQPMessage;use think\Controller;/**?* 發(fā)送端?*/class MessageQueue extends Controller{?? ?const exchange = 'xcuser';? ? const queue = 'xcmsg';? ? /**? ? ?* 發(fā)送消息? ? ?*/? ? public function pushMessage($data)? ? {? ? ? ? $host = '127.0.0.1';? ? ? ? $port = 5672;? ? ? ? $user = 'guest';? ? ? ? $pwd = 'guest';? ? ? ? $vhost = '/';? ? ? ? $connection = new AMQPStreamConnection($host, $port, $user, $pwd, $vhost);? ? ? ? $channel = $connection->channel();? ? ? ? $channel->exchange_declare(self::exchange, 'direct', false, true, false);? ? ? ? $channel->queue_declare(self::queue, false, true, false, false);? ? ? ? $channel->queue_bind(self::queue, self::exchange);? ? ? ? $messageBody = $data;? ? ? ? $message = new AMQPMessage($messageBody, array('content_type' => 'text/plain', 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT));? ? ? ? $channel->basic_publish($message, self::exchange);? ? ? ? $channel->close();? ? ? ? $connection->close();? ? ? ? echo 'ok';? ? }? ? /**? ? ?* 執(zhí)行? ? ?*/? ? public function index()? ? {? ? ? ? $data = json_encode(['msg' => '測試數(shù)據(jù)', 'id' => '15']);? ? ? ? $this->pushMessage($data);? ? }}5、驗證

先執(zhí)行自定義命令,啟動 rabbitmq 守護進程。在項目更目錄下打開命令行,輸入下面命令:

php think ramq

然后在瀏覽器訪問發(fā)送信息的方法,http://你的域名/api/message/index,你發(fā)送一次消息,在命令行就會輸出一條消息。這樣我們就用 RabbitMQ 實現(xiàn)了一個簡單的消息隊列。

到此這篇關(guān)于TP5使用RabbitMQ實現(xiàn)消息隊列的項目實踐的文章就介紹到這了,更多相關(guān)TP5 RabbitMQ消息隊列內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: PHP
主站蜘蛛池模板: 久久99国产亚洲高清 | 国产成人精品福利网站在线 | 免费一级毛片女人图片 | 麻豆网站在线看 | 黄色影院 | 亚洲精品欧美日韩 | 国产黄在线观看免费观看软件视频 | 黄色影 | 国产精品专区第二 | 国产综合婷婷 | 欧美精品人爱c欧美精品 | 精品欧美日韩一区二区三区 | 国产噜噜噜精品免费 | 1区1区3区4区产品亚洲 | 婷婷射| 成人看片黄在线观看 | 日韩精品免费在线观看 | 午夜久草| 超级极品白嫩美女在线 | 久久97精品久久久久久清纯 | 国产剧情精品在线 | 国内精品视频一区二区八戒 | 美国一级毛片视频 | 非洲一级毛片又粗又长aaaa | 黄色片在线观看免费 | 亚洲国产亚洲片在线观看播放 | 亚洲成在人线免费视频 | 丝袜亚洲精品中文字幕一区 | 久草在线资源福利站 | 黄色一级视频在线播放 | 免费观看的毛片 | 精品国产品欧美日产在线 | 91精品福利在线 | 国产成人在线免费视频 | 国产伦理播放一区二区 | 精品一区二区三区在线观看视频 | 亚洲精品国产综合99久久一区 | 欧美日韩在线永久免费播放 | 亚洲精品456人成在线 | 国产午夜精品福利视频 | 国产xx视频 |