在CentOS7.4的Docker下安装rabbitmq

首先可查看docker官网说明https://docs.docker.com/samples/library/rabbitmq/以了解如何使用rabbitmq

一、手动安装和配置rabbitmq

A.下载镜像
输入命令systemctl start docker确保docker服务已启动。
输入命令docker pull rabbitmq:3.7.8-management来下载指定版本的且带有管理工具的镜像。
输入命令docker images来查看所有镜像,可看到刚下的rabbitmq,大约149M。
B.了解基本docker命令配置
通过docker run运行rabbitmq容器需要了解的参数有下面这些
-p 表示将主机端口左xxx映射到容器内端口右xxx
-d 表示在后台运行
–name 表示启动后的容器名称
–hostname 表示rabbitmq的节点名,不写则默认为主机名。rabbitmq是根据节点来存储数据的。必须唯一
-e 指定环境变量,RABBITMQ_DEFAULT_VHOST:默认虚拟主机名;
RABBITMQ_DEFAULT_USER:默认的用户名;
RABBITMQ_DEFAULT_PASS:默认用户名的密码;
RABBITMQ_VM_MEMORY_HIGH_WATERMARK:最多使用多少内存,例如0.4表示最多使用主机的40%的内存;
还有其它环境变量可去官网查看。这些变量将通过docker引擎传递。要注意如果设置了rabbitmq.conf配置文件,那么配置文件优先,环境变量是无效的。
–mount type=bind,src=主机的目录或文件,dst=容器的目录或文件 表示将主机某个自定义的目录或文件映射为容器的相关相录或文件,这样即使容器被删除,但容器之外映射的那个目录和文件都还在。从docker官网的说明中可以找到相关可以设置的选项。
C.了解其它配置
详细可看http://www.rabbitmq.com/configure.html
从本文开头的第二个网址可知rabbitmq的配置文件路径是/etc/rabbitmq/rabbitmq.conf(配置文件用的新语法则必须后缀是.conf)
那么我新建自定义目录或文件来映射,再通过–mount映射。
D.配置并运行容器
输入cd /进入主机根目录
输入ls查看有哪些目录
输入mkdir -p /my_rabbitmq/config一次性在根目录下面创建好my_rabbitmq和子目录config两个文件夹。(mkdir -p或者–parents 若路径中的某些目录尚不存在,将自动创建不存在的目录,即一次可以建立多个目录)
输入cd my_rabbitmq/config进入config目录
输入vi rabbitmq.config创建配置文件
输入i进入编辑状态
输入以下配置内容:(#号开头的都是注释)

# 虚拟主机名
default_vhost = my_rabbitmq_host

# 内存使用设置
# vm_memory_high_watermark.relative = 0.5相对于可用内存最多使用50%
# vm_memory_high_watermark.absolute = 2GB 相对于总内存最多使用2G
vm_memory_high_watermark.absolute = 0.4

## 用户设置
# 默认用户名
default_user = admin

# 默认密码
default_pass = abc123456

# 默认用户的tags
default_user_tags.administrator = true

# 默认用户的权限
default_permissions.configure = .*
default_permissions.read = .*
default_permissions.write = .*

## 日志设置

## 日志文件名
log.file = rabbit.log

## 也可禁用日志
# log.file = false

## 日志等级
# 这里开时设为info方便调式,生产时改为error,只在出错时才记日志,节省硬盘
log.file.level = info


## 其它一些设置
# 每个connection最大允许的channels数,0表示无限制,默认值是2047
channel_max = 128

Esc键退出编辑模式,然后输入:wq保存并退出。
那么–mount语句则是下面这样
–mount type=bind,src=/my_rabbitmq/config/rabbitmq.config,dst=/etc/rabbitmq/rabbitmq.config

输入cd ../回到上一级目录
输入mkdir -p log 创建目录用于日志,这时my_rabbitmq目录下就有两个目录了config、log
那么日志目录映射是下面这样
–mount type=bind,src=/my_rabbitmq/log,dst=/var/log/rabbitmq
完整运行rabbitmq容器命令如下(注意\前有一个空格,\后没有空格),也可以写成一行,就不需要用\了

docker run -d --name rabbitmq01 \
-p 5672:5672 -p 15672:15672 \
--hostname my_node01 \
--mount type=bind,src=/my_rabbitmq/config/rabbitmq.conf,dst=/etc/rabbitmq/rabbitmq.conf \
--mount type=bind,src=/my_rabbitmq/log,dst=/var/log/rabbitmq \
rabbitmq:3.7.8-management

其中5672是提供给应用程序访问的端口,15672是rabbitmq自带的Web管理工具所使用的端口。(生产时去掉-p 15672:15672)
运行命令后输入docker ps查看正在运行的容器,如果找不到名为rabbitmq01的容器,再输入docker ps -a查看所有容器,如果发现rabbitmq01的容器的status是Exited的话说明运行容器失败,有问题,如果是up则成功了,(开始我用的.config所以失败了)。这时可输入docker logs 容器id或名称来查看日志。然后输入docker rm 容器id或名称即可删除名为rabbitmq01的容器。
从docker ps命令查看运行成功后,
输入docker logs rabbitmq01查看日志来验证配置文件的设置
然后需要开放我虚拟CentOS7.4的5672端口以供外部访问rabbimt
输入firewall-cmd --zone=public --add-port=5672/tcp --permanent
输入firewall-cmd --zone=public --add-port=15672/tcp --permanent
其中–permanent表示永远开放,不加则是临时开放,重启就失效了
E.在外部访问centos的rabbitmq
输入ifconfig在ens33节查看到虚拟机地址是192.168.213.144
在我的win10系统中输入http://192.168.213.144:15672进入rabbitmq的web管理工具登录界面,输入用户名和密码后成功登录。
F.C#访问centos的rabbitmq
在我的win10系统中打开VS2017,新建一个net core控制台程序。
详情可看http://www.rabbitmq.com/dotnet-api-guide.html
在nuget中下载RabbitMQ.Client包,使用如下代码:

static void Main(string[] args)
        {
    
    
            //一、连接rabbitmq
            ConnectionFactory factory = new ConnectionFactory
            {
    
    
                UserName = "admin",
                Password = "abc123456",
                VirtualHost = "my_rabbitmq_host",
                HostName = "192.168.213.144",
                Port = 5672
            };
            IConnection conn = factory.CreateConnection();

            //二、创建一个通道
            IModel channel = conn.CreateModel();

            //三、创建一个交换机
            string exchangeName = "exchange1";
            string queueName = "queue1";
            string routingKey = "routingKey1";
            channel.ExchangeDeclare(exchangeName, ExchangeType.Direct);

            //四、创建一个消息队列并且绑定到交换机上
            channel.QueueDeclare(queueName, false, false, false, null);
            channel.QueueBind(queueName, exchangeName, routingKey, null);

            //五、发道一个消息到消息队列
            byte[] messageBodyBytes = System.Text.Encoding.UTF8.GetBytes("Hello, world!");
            channel.BasicPublish(exchangeName, routingKey, null, messageBodyBytes);

            Console.Read();
        }

运行程序后,再登录web管理工具,可在里面看到相关数据。

二、通过docker-compose自动安装和配置rabbitmq

先清理前面手动安装的rabbitmq,但保留原先的创建的目录和配置文件。
输入docker stop rabbitmq01停止容器。
输入docker rm rabbitmq01删除容器。
输入docker rmi rabbitmq:3.7.8-management删除镜像。
输入docker images再查看,可看到已成功删除rabbitmq镜像。
输入cd /my_rabbitmq进入此目录。
输入vi docker-compose-rabbitmq.yml创建一个yml文件。
输入i进入编辑状态
输入以下代码(切记不要把在windows中写好的复制过来,还是在centos中创建文件并一个个字符手动敲入最保险,本人复制过来被坑,搞了好久不行,结果手动输入就编译通过了,切记该空格的一定要空格,yaml语法检查非常严格,以下代码中的version版本取决于你装的docker版本支持的情况,具体关于 .yml文件的说明请看官网https://docs.docker.com/compose/compose-file)

version: '3.7'
services:
  rabbitmq:
    container_name: 'rabbitmq01'
    image: rabbitmq:3.7.8-management
    hostname: 'my_node01'
    restart: always
    ports:
      - '5672:5672'
      - '15672:15672'
    volumes:
      - /my_rabbitmq/config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
      - /my_rabbitmq/log:/var/log/rabbitmq

输入docker-compose -f docker-compose-rabbitmq.yml build先编译看有错误没。
如没错误,就输入docker-compose -f docker-compose-rabbitmq.yml up -d执行目录中的.yml文件,然后就可看到开始下载rabbitmq镜像,下载完后自动启动容器。
完成后输入docker ps查看正在运行容器,一切OK。
然后在我的win10系统中,打开浏览器登录rabbitmq的web管理工具,也OK。
最后通过C#访问,也OK。

猜你喜欢

转载自blog.csdn.net/junshangshui/article/details/85015377