电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

TP5使用RabbitMQ實(shí)現(xiàn)消息隊(duì)列的項(xiàng)目實(shí)踐

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

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

1、安裝擴(kuò)展

進(jìn)入TP5 更目錄下,輸入命令安裝:

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

TP5 的自定義命令,這里也簡(jiǎn)單說(shuō)下。

第一步:

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

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

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

第二步:

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

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

第三步:

測(cè)試命令,在項(xiàng)目根目錄下輸入命令:

php think test

回車運(yùn)行之后輸出:

test command

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

3、rabbitmq服務(wù)端

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

<?phpnamespace app\api\command;use PhpAmqpLib\Connection\AMQPStreamConnection;use think\console\Command;use think\console\Input;use think\console\Output;/**?* RabbitMq 啟動(dòng)命令?*/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('消息隊(duì)列開始');? ? ? ? $this->start();? ? ? ? // 指令輸出? ? ? ? $output->writeln('消費(fèi)隊(duì)列結(jié)束');? ? }? ? /**? ? ?* 關(guān)閉? ? ?*/? ? function shutdown($channel, $connection)? ? {? ? ? ? $channel->close();? ? ? ? $connection->close();? ? }? ? /**? ? ?* 回調(diào)處理信息? ? ?*/? ? function process_message($message)? ? {? ? ? ? if ($message->body !== 'quit') {? ? ? ? ? ? echo $message->body;? ? ? ? }? ? ? ? //手動(dòng)應(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']);? ? ? ? }? ? }? ? /**? ? ?* 啟動(dòng) 守護(hù)進(jìn)程運(yùn)行? ? ?*/? ? 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ā)送端

最后,我們?cè)賹懓l(fā)送消息的控制器,實(shí)現(xiàn)消息隊(duì)列,具體代碼如下:

<?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' => '測(cè)試數(shù)據(jù)', 'id' => '15']);? ? ? ? $this->pushMessage($data);? ? }}5、驗(yàn)證

先執(zhí)行自定義命令,啟動(dòng) rabbitmq 守護(hù)進(jìn)程。在項(xiàng)目更目錄下打開命令行,輸入下面命令:

php think ramq

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

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

標(biāo)簽: PHP
主站蜘蛛池模板: 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 美国查特CHART MVE液氮罐_查特杜瓦瓶_制造全球品质液氮罐 | 陶氏道康宁消泡剂_瓦克消泡剂_蓝星_海明斯德谦_广百进口消泡剂 | 幂简集成 - 品种超全的API接口平台, 一站搜索、试用、集成国内外API接口 | 阴离子聚丙烯酰胺价格_PAM_高分子聚丙烯酰胺厂家-河南泰航净水材料有限公司 | 贵州自考_贵州自学考试网| YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 混合生育酚_醋酸生育酚粉_琥珀酸生育酚-山东新元素生物科技 | 聚合甘油__盐城市飞龙油脂有限公司 | 陕西自考报名_陕西自学考试网| 重庆钣金加工厂家首页-专业定做监控电视墙_操作台 | crm客户关系管理系统,销售管理系统,crm系统,在线crm,移动crm系统 - 爱客crm | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 语料库-提供经典范文,文案句子,常用文书,您的写作得力助手 | 河南中专学校|职高|技校招生-河南中职中专网 | 灰板纸、灰底白、硬纸板等纸品生产商-金泊纸业 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 字典-新华字典-在线字典查字-字典趣| 渣油泵,KCB齿轮泵,不锈钢齿轮泵,重油泵,煤焦油泵,泊头市泰邦泵阀制造有限公司 | 干式变压器厂_干式变压器厂家_scb11/scb13/scb10/scb14/scb18干式变压器生产厂家-山东科锐变压器有限公司 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 反渗透阻垢剂-缓蚀阻垢剂厂家-循环水处理药剂-山东鲁东环保科技有限公司 | 国际高中-国际学校-一站式择校服务-远播国际教育 | 微信聊天记录恢复_手机短信删除怎么恢复_通讯录恢复软件下载-快易数据恢复 | 骨龄仪_骨龄检测仪_儿童骨龄测试仪_品牌生产厂家【品源医疗】 | 对夹式止回阀_对夹式蝶形止回阀_对夹式软密封止回阀_超薄型止回阀_不锈钢底阀-温州上炬阀门科技有限公司 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 智慧消防-消防物联网系统云平台| 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 鑫铭东办公家具一站式定制采购-深圳办公家具厂家直销 | 不锈钢复合板|钛复合板|金属复合板|南钢集团安徽金元素复合材料有限公司-官网 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 工控机-工业平板电脑-研华工控机-研越无风扇嵌入式box工控机 | 网站优化公司_北京网站优化_抖音短视频代运营_抖音关键词seo优化排名-通则达网络 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | 佛山市德信昌电子有限公司| 防水试验机_防水测试设备_防水试验装置_淋雨试验箱-广州岳信试验设备有限公司 | 安平县鑫川金属丝网制品有限公司,声屏障,高速声屏障,百叶孔声屏障,大弧形声屏障,凹凸穿孔声屏障,铁路声屏障,顶部弧形声屏障,玻璃钢吸音板 |