RabbitMQ RabbitMQ是一个被广泛使用的开源消息队列。它是轻量级且易于部署的,它能支持多种消息协议。RabbitMQ可以部署在分布式和联合配置中,以满足高规模、高可用性的需求。
RabbitMQ的安装和使用 1、查找镜像 docker search rabbitmq2、拉取镜像 docker pull rabbitmq:3.7.16-management默认情况下,会拉取rabbitmq的latest版本。这里拉取 Web浏览器管理页面的tag 3.7.16-management
3、启动镜像 docker run -p 15672:15672 -p 5672:5672 -d --hostname dnmp-rabbitmq \--name dnmp-rabbitmq --network dnmp_backend \-e RABBITMQ_DEFAULT_USER=admin \-e RABBITMQ_DEFAULT_PASS=admin \rabbitmq:3.7.16-management参数解释
15672 :表示 RabbitMQ 控制台端口号,可以在浏览器中通过控制台来执行 RabbitMQ 的相关操作。 5672: 表示 RabbitMQ 所监听的 TCP 端口号,应用程序可通过该端口与 RabbitMQ 建立 TCP 连接,完成后续的异步消息通信 RABBITMQ_DEFAULT_USER:用于设置登陆控制台的用户名,这里我设置 admin RABBITMQ_DEFAULT_PASS:用于设置登陆控制台的密码,这里我设置 admin容器启动成功后,可以在浏览器输入地址:http://ip:15672/访问控制台
5、输入账号密码并登录 admin admin 6、创建帐号并设置其角色为管理员 resty resty
7、创建一个新的虚拟host为 resty
8、点击 resty 用户进入用户配置页面 9、给 resty 用户配置该虚拟host的权限
10、至此,RabbitMQ的安装和配置完成 RabbitMQ的消息模型
PHP 客户端库 以下以ThinkPHP5.1 框架为测试环境
安装扩展库 php-amqplib docker run --rm --interactive --tty \-v e:/dnmp/www/iot.tinywan.com:/app \composer require php-amqplib/php-amqplib \v2.9.0 --ignore-platform-reqs 消息发布者(发送者) mq_send.php 脚本 #!/usr/bin/env php<?phpnamespace think;define('APP_PATH', __DIR__ . '/application/');require __DIR__ . '/thinkphp/base.php';Container::get('app',[APP_PATH])->bind('http/RabbitMq/send')->run()->send();业务代码 public function send(){ $connection = new AMQPStreamConnection('dnmp-rabbitmq', 5672, 'admin', 'admin'); $channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false); $msg = new AMQPMessage('Hello World!'); $channel->basic_publish($msg, '', 'hello'); echo " [x] Sent 'Hello World!'\n"; $channel->close(); $connection->close();}注意
1、 user和 password就是docker启动时候的 RABBITMQ_DEFAULT_USER=admin和 RABBITMQ_DEFAULT_PASS=admin。前面我们设置的 admin和admin 2、连接主机host是dnmp-rabbitmq,由于是在docker容器之内 在终端中,运行消费者(接收者) > docker exec -it dnmp-php72 sh -c \"php /var/www/iot.tinywan.com/mq_receive.php" Waiting for messages. To exit press CTRL+C [x] Received Hello World! [x] Received Hello World! [x] Received Hello World! [x] Received Hello World!消息接收者(发送者) mq_receive.php脚本 #!/usr/bin/env php<?phpnamespace think;define('APP_PATH', __DIR__ . '/application/');require __DIR__ . '/thinkphp/base.php';Container::get('app',[APP_PATH])->bind('http/RabbitMq/receive')->run()->send();业务代码 public function receive(){ $connection = new AMQPStreamConnection('dnmp-rabbitmq', 5672, 'admin', 'admin'); $channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false); echo " Waiting for messages. To exit press CTRL+C\n"; $callback = function ($msg) { echo ' [x] Received ', $msg->body, "\n"; }; $channel->basic_consume('hello', '', false, true, false, false, $callback); while (count($channel->callbacks)) { $channel->wait(); }}在终端中,运行发布者(发件人) > docker exec -it dnmp-php72 sh -c "php /var/www/iot.tinywan.com/mq_send.php" [x] Sent 'Hello World!' |