欢迎光临seo外链资源网站,我们为你英文友情链接的信息及服务

seo外链资源

一个资源好的推广优化外链发布网站,为你解决外链获客难题

轻松上手 PHP + RabbitMQ 消息发布与订阅

作者:jcmp      发布时间:2021-05-08      浏览量:0
场景之前开发一个电竞比分网系统,有许多模

场景

之前开发一个电竞比分网系统,有许多模块依赖实时比赛状态(待开始、进行中、已结束、异常),比赛状态 进行中->已结束 由图像识别处理,识别到比赛结束后向消息队列发送某场比赛的状态信息,其他模块只需订阅队列消息获取比赛状态更新并进行对于逻辑处理。

RabbitMQ 概念

RabbitMQ 安装运行

$ docker pull rabbitmq:3.8.3-management。

$ docker run --name rabbitmq -d -p 5672:5672 -p 15672:15672 -v /data:/var/lib/rabbitmq rabbitmq:3.8.3-management。

$ docker exec -it 89e8e968aebc bashroot@89e8e968aebc:/# rabbitmqctl add_user ar414 ar414 root@89e8e968aebc:/# rabbitmqctl set_user_tags ar414 administrator。

PHP 简单使用

安装

$ composer require php-amqplib/php-amqplib。

发布者

channel();$channel->exchange_declare($exchange, 'direct', false, false, false);for ($i = 0; $i < 100; $i++) { $routes = ['dota', 'csgo', 'lol']; $key = array_rand($routes); $arr = [ 'match_id' => $i, 'status' => rand(0,3) ]; $data = json_encode($arr); $msg = new AMQPMessage($data); $channel->basic_publish($msg, $exchange, $routes[$key]); echo '发送 '.$routes[$key].' 消息: ' . $data . PHP_EOL;}$channel->close();$connection->close();

订阅者

channel(); $channel->exchange_declare($exchange, 'direct', false, false, false);list($queueName, ,) = $channel->queue_declare("", false, false, true, false);$channel->queue_bind($queueName, $exchange, $routerKey);echo " 等待消息中..." .PHP_EOL;$callback = function ($msg) { echo '接收到消息:',$msg->delivery_info['routing_key'], ':', $msg->body, PHP_EOL; sleep(1); //模拟耗时执行};$channel->basic_consume($queueName, '', false, true, false, false, $callback);while ($channel->is_consuming()) { $channel->wait();}$channel->close();$connection->close();

运行

1. 运行某一个订阅者程序监听LOL消息队列(LolSub.php) 2. 运行发送者程序(Send.php)。

$ php Send.php

ar414

$ php LolSub.php