最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2023年06月29日 09:41:17   作者:L小臣  
本文主要介紹了TP5使用RabbitMQ實現(xiàn)消息隊列的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

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

1、安裝擴展

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

composer require php-amqplib/php-amqplib

2、自定義命令

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

第一步:

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

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

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

第二步:

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

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

第三步:

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

php think test

回車運行之后輸出:

test command

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

3、rabbitmq服務端

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

<?php
namespace 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é)束');
? ? }
? ? /**
? ? ?* 關閉
? ? ?*/
? ? function shutdown($channel, $connection)
? ? {
? ? ? ? $channel->close();
? ? ? ? $connection->close();
? ? }
? ? /**
? ? ?* 回調(diào)處理信息
? ? ?*/
? ? function process_message($message)
? ? {
? ? ? ? if ($message->body !== 'quit') {
? ? ? ? ? ? echo $message->body;
? ? ? ? }
? ? ? ? //手動應答
? ? ? ? $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)消息隊列,具體代碼如下:

<?php
namespace 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)了一個簡單的消息隊列。

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

相關文章

  • php生成短網(wǎng)址示例

    php生成短網(wǎng)址示例

    這篇文章主要介紹了php生成短網(wǎng)址示例,需要的朋友可以參考下
    2014-05-05
  • discuz加密解密函數(shù)使用方法和中文注釋

    discuz加密解密函數(shù)使用方法和中文注釋

    這篇文章主要介紹了discuz加密解密函數(shù)的使用方法和中文注釋,大家參考使用吧
    2014-01-01
  • php實現(xiàn)當前頁面點擊下載文件的實例代碼

    php實現(xiàn)當前頁面點擊下載文件的實例代碼

    下面小編就為大家?guī)硪黄猵hp實現(xiàn)當前頁面點擊下載文件的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • magento后臺無法登錄解決辦法的兩種方法

    magento后臺無法登錄解決辦法的兩種方法

    可能很多朋友有同樣的經(jīng)歷,magento在服務器中配置域名是可以正常的訪問了,但是在本地配置后卻無法登錄后臺,賬號密碼登錄的時候發(fā)現(xiàn)出現(xiàn)空白,無法跳轉(zhuǎn)到后臺,本文章向大家介紹兩種解決本地magento后臺無法登錄的方法,需要的朋友可以參考下
    2016-12-12
  • Yii2.0表關聯(lián)查詢實例分析

    Yii2.0表關聯(lián)查詢實例分析

    這篇文章主要介紹了Yii2.0表關聯(lián)查詢的方法,結(jié)合實例形式分析了Yii中關聯(lián)查詢的實現(xiàn)方法與相關使用技巧,需要的朋友可以參考下
    2016-07-07
  • PHP字符串的編碼問題的詳細介紹

    PHP字符串的編碼問題的詳細介紹

    本篇文章介紹了,在PHP中字符串的編碼問題的詳細分析,需要的朋友參考下
    2013-04-04
  • PHPStrom 新建FTP項目以及在線操作教程

    PHPStrom 新建FTP項目以及在線操作教程

    PhpStorm是一個輕量級且便捷的PHP IDE,其提供的智能代碼補全,快速導航以及即時錯誤檢查等功能大大提高了編碼效率。它是一款商業(yè)的 PHP 集成開發(fā)工具,以其獨特的開發(fā)便利性,短時間內(nèi)贏得了大量PHPer的青睞。今天我們來詳細學習下FTP相關的操作
    2016-10-10
  • 如何修改Laravel中url()函數(shù)生成URL的根地址

    如何修改Laravel中url()函數(shù)生成URL的根地址

    這篇文章主要給大家介紹了關于如何修改Laravel中url()函數(shù)生成URL根地址的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用laravel具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-08-08
  • php打亂數(shù)組二維數(shù)組多維數(shù)組的簡單實例

    php打亂數(shù)組二維數(shù)組多維數(shù)組的簡單實例

    下面小編就為大家?guī)硪黄猵hp打亂數(shù)組二維數(shù)組多維數(shù)組的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • thinkPHP框架實現(xiàn)的短信接口驗證碼功能示例

    thinkPHP框架實現(xiàn)的短信接口驗證碼功能示例

    這篇文章主要介紹了thinkPHP框架實現(xiàn)的短信接口驗證碼功能,涉及基于thinkPHP的ajax提交、隨機數(shù)生成、短信接口調(diào)用、cookie操作等相關實現(xiàn)技巧,需要的朋友可以參考下
    2018-06-06

最新評論

河间市| 墨竹工卡县| 白城市| 临夏市| 内黄县| 绥德县| 霍林郭勒市| 弥渡县| 内丘县| 锦州市| 松原市| 辽阳县| 乌审旗| 府谷县| 蕉岭县| 宜阳县| 台州市| 古田县| 峨边| 武陟县| 榆社县| 望奎县| 西安市| 崇明县| 玉溪市| 安阳县| 周至县| 阳高县| 莒南县| 加查县| 晋州市| 云和县| 永福县| 南江县| 定西市| 恭城| 大邑县| 尖扎县| 垦利县| 台江县| 宣武区|