前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker搭建RabbitMQ

Docker搭建RabbitMQ

作者头像
Tinywan
发布2019-07-16 13:24:48
3.3K1
发布2019-07-16 13:24:48
举报
文章被收录于专栏:开源技术小栈开源技术小栈

RabbitMQ

RabbitMQ是一个被广泛使用的开源消息队列。它是轻量级且易于部署的,它能支持多种消息协议。RabbitMQ可以部署在分布式和联合配置中,以满足高规模、高可用性的需求。

RabbitMQ的安装和使用

1、查找镜像

docker search rabbitmq

2、拉取镜像

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/访问控制台

4、访问地址查看是否安装成功:http://127.0.0.1:15672/

5、输入账号密码并登录 admin admin

6、创建帐号并设置其角色为管理员 resty resty

7、创建一个新的虚拟host为 resty

8、点击 resty 用户进入用户配置页面9、给 resty 用户配置该虚拟host的权限

10、至此,RabbitMQ的安装和配置完成

RabbitMQ的消息模型

标志

中文名

英文名

描述

P

生产者

Producer

消息的发送者,可以将消息发送到交换机

C

消费者

Consumer

消息的接收者,从队列中获取消息进行消费

X

交换机

Exchange

消息的发送者,可以将消息发送到交换机

Q

队列

Queue

存储从交换机发来的消息

type

交换机类型

type

direct表示直接根据路由键(orange/black)发送消息

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
<?php
namespace 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、 userpassword就是docker启动时候的 RABBITMQ_DEFAULT_USER=adminRABBITMQ_DEFAULT_PASS=admin。前面我们设置的 adminadmin 2、连接主机hostdnmp-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
<?php
namespace 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!'
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tinywan的杂货摊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RabbitMQ
  • RabbitMQ的安装和使用
  • RabbitMQ的消息模型
  • PHP 客户端库
    • 安装扩展库 php-amqplib
      • 消息发布者(发送者)
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档