【RabbitMQ实战】3分钟在Linux上安装RabbitMQ

本节采用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

相关推荐
今日晴空万里32 分钟前
Kafka基础概念
分布式·kafka
武子康3 小时前
大数据-138 - ClickHouse 集群 表引擎详解3 - MergeTree 存储结构 数据标记 分区 索引 标记 压缩协同
java·大数据·分布式·clickhouse·flink
qq_339191143 小时前
docker 创建showdoc服务 showdoc容器部署教程
运维·docker·容器
qq_415292643 小时前
docker镜像源
运维·docker·容器
梧六柒3 小时前
CentOS 7上安装Docker
docker
无理 Java3 小时前
【技术解析】消息中间件MQ:从原理到RabbitMQ实战(深入浅出)
java·分布式·后端·rabbitmq·多线程·mq·消息中间件
Zww08914 小时前
docker部署excalidraw画图工具
运维·docker·容器
LCRxxoo5 小时前
windows docker下启动mysql报Bind on unix socket: Input/output error
mysql·docker·容器
职教育人6 小时前
Docker UI强大之处?
spring cloud·docker·容器
鱼跃鹰飞8 小时前
大厂面试真题-Kafka如何保证消息不丢失
分布式·算法·面试·职场和发展·kafka