本节采用docker安装RabbitMQ。采用的是bitnami的镜像。Bitnami是一个提供各种流行应用的Docker镜像和软件包的公司。采用docker的方式3分钟就可以把我们想安装的程序运行起来,不得不说真的很方便啊,好了,开搞。使用前提:Linux虚拟机,安装好了docker环境。如果没有安装docker的话,请参考这里,先把docker先安装上。
一、搜索镜像
bash
[root@localhost ~]# docker search rabbitmq
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
rabbitmq RabbitMQ is an open source multi-protocol me... 4887 [OK]
bitnami/rabbitmq Bitnami Docker Image for RabbitMQ 103 [OK]
这里我们选择bitname/rabbitmq
二、下载镜像
bash
[root@localhost ~]# docker pull bitnami/rabbitmq
Using default tag: latest
latest: Pulling from bitnami/rabbitmq
三、把RabbitMQ镜像跑起来
bash
docker run -d --name rabbitmq \
-e RABBITMQ_USERNAME=admin \
-e RABBITMQ_PASSWORD=admin \
-p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 bitnami/rabbitmq
其中RABBITMQ_USERNAME是用户名
RABBITMQ_PASSWORD是密码
关于更多环境变量的说明,见文末
四、查看运行效果
看一下docker容器是否成功启动了,下面可以看到正在运行
bash
[root@localhost ~]# docker ps | grep rabbit
0d5cb60e3a06 bitnami/rabbitmq "/opt/bitnami/script..." 22 seconds ago Up 20 seconds 4369/tcp, 5551-5552/tcp, 0.0.0.0:1883->1883/tcp, :::1883->1883/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp, 0.0.0.0:25672->25672/tcp, :::25672->25672/tcp, 0.0.0.0:61613->61613/tcp, :::61613->61613/tcp, 15671/tcp rabbitmq
输入地址访问一下控制台
http://192.168.56.201:15672/#/
用户名:admin,密码admin
登录成功
到此为止,我们就可以愉快地和RabbitMQ玩耍了
五、关于环境变量的说明
(来源于官网)
js
RABBITMQ_VHOST: RabbitMQ application vhost. Default: /
RABBITMQ_VHOSTS: List of additional virtual host (vhost), separated by space. E.g.: /shared /prioritized /tasks
RABBITMQ_USERNAME: RabbitMQ application username. Default: user
RABBITMQ_PASSWORD: RabbitMQ application password. Default: bitnami
RABBITMQ_SECURE_PASSWORD: Whether to set the RabbitMQ password securely. This is incompatible with loading external RabbitMQ definitions. Default: no
RABBITMQ_LOAD_DEFINITIONS: Whether to load external RabbitMQ definitions. This is incompatible with setting the RabbitMQ password securely. Default: no.
RABBITMQ_ERL_COOKIE: Erlang cookie to determine whether different nodes are allowed to communicate with each other.
RABBITMQ_NODE_TYPE: Node Type. Valid values: stats, queue-ram or queue-disc. Default: stats
RABBITMQ_NODE_NAME: Node name and host. E.g.: node@hostname or node (localhost won't work in cluster topology). Default rabbit@localhost. If using this variable, ensure that you specify a valid host name as the container wil fail to start otherwise. If using a fully qualified domain name, RABBITMQ_USE_LONGNAME needs to be set to true as well.
RABBITMQ_USE_LONGNAME: When set to true this will cause RabbitMQ to use fully qualified names to identify nodes. Default: false
RABBITMQ_FORCE_BOOT: Force a node to start even if it was not the last to shut down. Default: no
RABBITMQ_CLUSTER_NODE_NAME: Node name to cluster with. E.g.: clusternode@hostname
RABBITMQ_CLUSTER_PARTITION_HANDLING: Cluster partition recovery mechanism. Default: ignore
RABBITMQ_NODE_PORT_NUMBER: Node port. Default: 5672
RABBITMQ_NODE_SSL_PORT_NUMBER: RabbitMQ node port number for SSL connections. Default: 5671
RABBITMQ_SSL_CACERTFILE: Path to the RabbitMQ server SSL CA certificate file. No defaults.
RABBITMQ_SSL_CERTFILE: Path to the RabbitMQ server SSL certificate file. No defaults.
RABBITMQ_SSL_KEYFILE: Path to the RabbitMQ server SSL certificate key file. No defaults.
RABBITMQ_COMBINED_CERT_PATH: Cert- and keyfile are combined automatically into one combined file at this file path. If you are using a combined certificate anyways, mount it to the container and set this path to the mounted file. Default: /tmp/rabbitmq_combined_keys.pem
RABBITMQ_SSL_DEPTH: Maximum number of non-self-issued intermediate certificates that may follow the peer certificate in a valid certification path. No defaults.
RABBITMQ_SSL_FAIL_IF_NO_PEER_CERT: Whether to reject TLS connections if client fails to provide a certificate. Default: verify_none
RABBITMQ_SSL_VERIFY: Whether to enable peer SSL certificate verification. Default: no
RABBITMQ_PLUGINS: Comma, semi-colon or space separated list of plugins to enable during the initialization. No defaults.
RABBITMQ_COMMUNITY_PLUGINS: Comma, semi-colon or space separated list of URLs where to download custom plugins during the initialization. No defaults.
Management server configuration
RABBITMQ_MANAGEMENT_BIND_IP: RabbitMQ management server bind IP address. Default: 0.0.0.0
RABBITMQ_MANAGEMENT_PORT_NUMBER: RabbitMQ management server port number. Default: 15672
RABBITMQ_MANAGEMENT_SSL_PORT_NUMBER: RabbitMQ management server port number for SSL/TLS connections. No defaults.
RABBITMQ_MANAGEMENT_SSL_CACERTFILE: Path to the RabbitMQ management server SSL CA certificate file. No defaults.
RABBITMQ_MANAGEMENT_SSL_CERTFILE: Path to the RabbitMQ management server SSL certificate file. No defaults.
RABBITMQ_MANAGEMENT_SSL_KEYFILE: Path to the RabbitMQ management server SSL certificate key file. No defaults.
RABBITMQ_MANAGEMENT_SSL_DEPTH: Maximum number of non-self-issued intermediate certificates that may follow the peer certificate in a valid certification path, for the RabbitMQ management server. No defaults.
RABBITMQ_MANAGEMENT_SSL_FAIL_IF_NO_PEER_CERT: Whether to reject TLS connections if client fails to provide a certificate for the RabbitMQ management server. Default: yes
RABBITMQ_MANAGEMENT_SSL_VERIFY: Whether to enable peer SSL certificate verification for the RabbitMQ management server. Default: verify_peer
LDAP configuration
RABBITMQ_ENABLE_LDAP: Enable the LDAP configuration. Defaults: no
RABBITMQ_LDAP_TLS: Enable secure LDAP configuration. Defaults: no
RABBITMQ_LDAP_SERVERS: Comma, semi-colon or space separated list of LDAP server hostnames. No defaults.
RABBITMQ_LDAP_SERVERS_PORT: LDAP servers port. Defaults: 389
RABBITMQ_LDAP_USER_DN_PATTERN: DN used to bind to LDAP in the form cn=$${username},dc=example,dc=org. No defaults.
Memory and disk configuration
RABBITMQ_VM_MEMORY_HIGH_WATERMARK: High memory watermark for RabbitMQ to block publishers and prevent new messages from being enqueued. Can be specified as an absolute or relative value (as percentage or value between 0 and 1). No defaults.
RABBITMQ_DISK_FREE_RELATIVE_LIMIT: Disk relative free space limit of the partition on which RabbitMQ is storing data. Default: 1.0
RABBITMQ_DISK_FREE_ABSOLUTE_LIMIT: Disk absolute free space limit of the partition on which RabbitMQ is storing data (takes precedence over the relative limit). No defaults.
RABBITMQ_ULIMIT_NOFILES: Resources limits: maximum number of open file descriptors. Default: 65536
六、进入RabbitMQ容器一探究竟
首先进入容器
bash
[root@localhost ~]# docker exec -it rabbitmq bin/bash
rabbitmq是依赖erlang环境的,所以查看一下erlang是否安装成功
输入 erl,可以看到如下输出
bash
```bash
I have no name!@0d5cb60e3a06:/$ erl
Erlang/OTP 24 [erts-12.2] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [jit]
Eshell V12.2 (abort with ^G)
1>
bitnami的镜像,软件一般安装在opt/bitnami目录下
bash
I have no name!@0d5cb60e3a06:/$ cd opt/bitnami/
I have no name!@0d5cb60e3a06:/opt/bitnami$ ls -al
total 4
drwxrwxr-x. 1 root root 22 Jan 4 2022 .
drwxrwxr-x. 1 root root 21 Jan 4 2022 ..
-rw-r--r--. 1 root root 659 Jan 4 2022 .bitnami_components.json
drwxr-xr-x. 4 root root 33 Aug 17 2021 common
drwxr-xr-x. 5 root root 44 Dec 15 2021 erlang
drwxrwxr-x. 2 root root 26 Jan 4 2022 licenses
drwxr-xr-x. 1 root root 45 Jan 4 2022 rabbitmq
drwxrwxr-x. 1 root root 82 Jan 4 2022 scripts
查看rabbitmq是否正常启动
rabbitmqctl status可以输出很多rabbitmq的信息
包括版本信息,安装的插件,数据安装目录,还有一些指标信息。
bash
I have no name!@0d5cb60e3a06:/opt/bitnami$ rabbitmqctl status
Status of node rabbit@localhost ...
Runtime
OS PID: 213
OS: Linux
Uptime (seconds): 816
Is under maintenance?: false
RabbitMQ version: 3.9.11
Node name: rabbit@localhost
Erlang configuration: Erlang/OTP 24 [erts-12.2] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [jit]
Erlang processes: 378 used, 1048576 limit
Scheduler run queue: 1
Cluster heartbeat timeout (net_ticktime): 60
Plugins
Enabled plugin file: /opt/bitnami/rabbitmq/etc/rabbitmq/enabled_plugins
Enabled plugins:
* rabbitmq_management
* amqp_client
* rabbitmq_web_dispatch
* cowboy
* cowlib
* rabbitmq_management_agent
Data directory
Node data directory: /bitnami/rabbitmq/mnesia/rabbit@localhost
Raft data directory: /bitnami/rabbitmq/mnesia/rabbit@localhost/quorum/rabbit@localhost
Config files
* /opt/bitnami/rabbitmq/etc/rabbitmq/rabbitmq.conf
Log file(s)
* /opt/bitnami/rabbitmq/var/log/rabbitmq/rabbit@localhost_upgrade.log
* <stdout>
Alarms
(none)
Memory
Total memory used: 0.1509 gb
Calculation strategy: rss
Memory high watermark setting: 0.4 of available memory, computed to: 1.1548 gb
reserved_unallocated: 0.0833 gb (55.2 %)
code: 0.0347 gb (22.97 %)
other_system: 0.0238 gb (15.78 %)
other_proc: 0.0192 gb (12.7 %)
other_ets: 0.0032 gb (2.09 %)
atom: 0.0014 gb (0.94 %)
plugins: 0.0014 gb (0.9 %)
binary: 5.0e-4 gb (0.31 %)
mgmt_db: 2.0e-4 gb (0.15 %)
connection_other: 1.0e-4 gb (0.09 %)
mnesia: 1.0e-4 gb (0.07 %)
metrics: 1.0e-4 gb (0.05 %)
msg_index: 1.0e-4 gb (0.04 %)
connection_readers: 0.0 gb (0.03 %)
queue_procs: 0.0 gb (0.02 %)
quorum_ets: 0.0 gb (0.0 %)
connection_channels: 0.0 gb (0.0 %)
stream_queue_procs: 0.0 gb (0.0 %)
stream_queue_replica_reader_procs: 0.0 gb (0.0 %)
connection_writers: 0.0 gb (0.0 %)
allocated_unused: 0.0 gb (0.0 %)
queue_slave_procs: 0.0 gb (0.0 %)
quorum_queue_procs: 0.0 gb (0.0 %)
stream_queue_coordinator_procs: 0.0 gb (0.0 %)
File Descriptors
Total: 6, limit: 1048479
Sockets: 1, limit: 943629
Free Disk Space
Low free disk space watermark: 2.8869 gb
Free disk space: 10.2966 gb
Totals
Connection count: 1
Queue count: 1
Virtual host count: 2
Listeners
Interface: [::], port: 15672, protocol: http, purpose: HTTP API
Interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
更多rabbitmq的操作,可以通过rabbitmqctl --help来查看
bash
I have no name!@0d5cb60e3a06:/opt/bitnami$ rabbitmqctl --help
七、扩展阅读
在玩容器的时候,一般搜索镜像的时候,会发现bitnami仓库的镜像,star都比较高。发现确实好用!
这里附上
官网链接:https://bitnami.com/stacks
在bitnami的官网,可以看到很多打包好的应用,链接进去是github的链接,是相关的镜像的说明
其中RabbitMQ镜像的git链接:https://github.com/bitnami/containers/tree/main/bitnami/rabbitmq
八、扩展:用docker-compose安装RabbitMQ集群
参考链接:https://github.com/bitnami/containers/tree/main/bitnami/rabbitmq#setting-up-a-cluster
这是最简单的方式安装一个RabbitMQ集群
docker-compose.yml如下:
yaml
version: '2'
services:
stats:
image: bitnami/rabbitmq
environment:
- RABBITMQ_NODE_TYPE=stats
- RABBITMQ_NODE_NAME=rabbit@stats
- RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
ports:
- '15672:15672'
volumes:
- 'rabbitmqstats_data:/bitnami/rabbitmq/mnesia'
queue-disc1:
image: bitnami/rabbitmq
environment:
- RABBITMQ_NODE_TYPE=queue-disc
- RABBITMQ_NODE_NAME=rabbit@queue-disc1
- RABBITMQ_CLUSTER_NODE_NAME=rabbit@stats
- RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
volumes:
- 'rabbitmqdisc1_data:/bitnami/rabbitmq/mnesia'
queue-ram1:
image: bitnami/rabbitmq
environment:
- RABBITMQ_NODE_TYPE=queue-ram
- RABBITMQ_NODE_NAME=rabbit@queue-ram1
- RABBITMQ_CLUSTER_NODE_NAME=rabbit@stats
- RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
volumes:
- 'rabbitmqram1_data:/bitnami/rabbitmq/mnesia'
volumes:
rabbitmqstats_data:
driver: local
rabbitmqdisc1_data:
driver: local
rabbitmqram1_data:
driver: local
首先建好一个docker-compose.yml文件
用cat命令,输出到docker-compose.yml
bash
[root@localhost mycompose]# cat >> docker-compose.yml << EOF
> version: '2'
>
> services:
> stats:
> image: bitnami/rabbitmq
> environment:
> - RABBITMQ_NODE_TYPE=stats
> - RABBITMQ_NODE_NAME=rabbit@stats
> - RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
> ports:
> - '15672:15672'
> volumes:
> - 'rabbitmqstats_data:/bitnami/rabbitmq/mnesia'
> queue-disc1:
> image: bitnami/rabbitmq
> environment:
> - RABBITMQ_NODE_TYPE=queue-disc
> - RABBITMQ_NODE_NAME=rabbit@queue-disc1
> - RABBITMQ_CLUSTER_NODE_NAME=rabbit@stats
> - RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
> volumes:
> - 'rabbitmqdisc1_data:/bitnami/rabbitmq/mnesia'
> queue-ram1:
> image: bitnami/rabbitmq
> environment:
> - RABBITMQ_NODE_TYPE=queue-ram
> - RABBITMQ_NODE_NAME=rabbit@queue-ram1
> - RABBITMQ_CLUSTER_NODE_NAME=rabbit@stats
> - RABBITMQ_ERL_COOKIE=s3cr3tc00ki3
> volumes:
> - 'rabbitmqram1_data:/bitnami/rabbitmq/mnesia'
>
> volumes:
> rabbitmqstats_data:
> driver: local
> rabbitmqdisc1_data:
> driver: local
> rabbitmqram1_data:
> driver: local
> EOF
[root@localhost mycompose]# ls -al
总用量 4
drwxr-xr-x. 2 root root 32 9月 24 21:26 .
dr-xr-x---. 6 root root 254 9月 24 21:23 ..
-rw-r--r--. 1 root root 1017 9月 24 21:26 docker-compose.yml
然后执行docker-compose up
bash
[root@localhost mycompose]# docker-compose up
执行效果如下:
启动完成后,发现确实是启了三个RabbitMQ的容器
bash
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8abe421a79a bitnami/rabbitmq "/opt/bitnami/script..." 2 minutes ago Up 2 minutes 4369/tcp, 5551-5552/tcp, 5671-5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp mycompose-stats-1
d797db9bbbbb bitnami/rabbitmq "/opt/bitnami/script..." 2 minutes ago Up 2 minutes 4369/tcp, 5551-5552/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp mycompose-queue-ram1-1
7ed4e7406553 bitnami/rabbitmq "/opt/bitnami/script..." 2 minutes ago Up 2 minutes 4369/tcp, 5551-5552/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp mycompose-queue-disc1-1
进入其中一个容器
如上面所示,我们进入ID为a8abe421a79a的容器。
bash
[root@localhost ~]# docker exec -it a8a /bin/bash
查看集群状态
bash
I have no name!@a8abe421a79a:/$ rabbitmqctl cluster_status
Cluster status of node rabbit@stats ...
Basics
Cluster name: rabbit@a8abe421a79a
Disk Nodes
rabbit@queue-disc1
rabbit@stats
RAM Nodes
rabbit@queue-ram1
Running Nodes
rabbit@queue-disc1
rabbit@queue-ram1
rabbit@stats
Versions
rabbit@queue-disc1: RabbitMQ 3.9.11 on Erlang 24.2
rabbit@queue-ram1: RabbitMQ 3.9.11 on Erlang 24.2
rabbit@stats: RabbitMQ 3.9.11 on Erlang 24.2
Maintenance status
Node: rabbit@queue-disc1, status: not under maintenance
Node: rabbit@queue-ram1, status: not under maintenance
Node: rabbit@stats, status: not under maintenance
Alarms
(none)
Network Partitions
(none)
Listeners
Node: rabbit@queue-disc1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@queue-disc1, interface: [::], port: 15692, protocol: http/prometheus, purpose: Prometheus exporter API over HTTP
Node: rabbit@queue-disc1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@queue-ram1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@queue-ram1, interface: [::], port: 15692, protocol: http/prometheus, purpose: Prometheus exporter API over HTTP
Node: rabbit@queue-ram1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: rabbit@stats, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@stats, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@stats, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Feature flags
Flag: drop_unroutable_metric, state: enabled
Flag: empty_basic_get_metric, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled
进入控制台:http://192.168.56.201:15672/#/
账号默认是:用户名:user,密码:bitnami