什么是RabbitMQ
RabbitMQ是由Erlang语言编写的实现了高级消息队列协议(AMQP)的开源消息代理软件(也可称为 面向消息的中间件)。支持Windows、Linux/Unix、MAC OS X操作系统和包括JAVA在内的多种编程语言。
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。
官方文档地址:
rabbitMQ的java驱动官方文档地址
版本5.3.0:https://rabbitmq.github.io/rabbitmq-java-client/api/current/overview-summary.html
版本4.7.0:https://rabbitmq.github.io/rabbitmq-java-client/api/4.x.x/overview-summary.html
spring AMQP 官方文档地址
版本1.7.3:https://docs.spring.io/spring-amqp/docs/1.7.3.BUILD-SNAPSHOT/api/
使用场景(解决了什么问题)
名称 | 简单说明 |
---|---|
异步处理 | 应用之间的异步处理问题 |
应用解耦 | 应用之间的解耦问题 |
流量削峰 | 对应用的流量进行削峰,如秒杀场景 |
日志处理 | 应用之间的日志收集,假设程序里面每个类,每个方法都要定义日志记录,单单说效率就不好 |
Rabblit官网地址
Rabblit官网地址:http://www.rabbitmq.com/
Erlang下载环境(网页往下拖有Erlang的官方安装方式,此方式不需要下载)
地址:https://www.erlang-solutions.com/resources/download.html
第一步安装Erlang使用存储库安装
1.添加存储库条目
要将Erlang Solutions存储库(包括用于验证已签名软件包的公共密钥)添加到您的系统,请调用以下命令:
wget https://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm
rpm -Uvh erlang-solutions-2.0-1.noarch.rpm
或者:手动添加存储库条目
RPM软件包已签名。要添加Erlang Solutions键,请执行以下命令:
rpm --import https://packages.erlang-solutions.com/rpm/erlang_solutions.asc
将以下行添加到"/etc/yum.repos.d/"中的erlang_solutions.repo文件中:
[erlang-solutions]
name=CentOS $releasever - $basearch - Erlang Solutions
baseurl=https://packages.erlang-solutions.com/rpm/centos/$releasever/$basearch
gpgcheck=1
gpgkey=https://packages.erlang-solutions.com/rpm/erlang_solutions.asc
enabled=1
2.添加具有依赖性的存储库
软件包需要一些标准存储库中不存在的软件包。请确保已启用EPEL存储库。
3.安装Erlang
调用以下命令来安装“ erlang”软件包:
sudo yum install erlang
安装成功后图片:
验证输入erl即可进入Erlang
第二步,手动安装RabbitMQ
在使用Yum存储库之前,必须先导入RabbitMQ签名密钥。这使RPM工具信任存储库中提供的软件包上的签名。为此,以超级用户身份运行rpm --import:
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
为了使用Yum存储库,必须在/etc/yum.repos.d/目录下添加一个.repo文件(例如,rebbitmq.repo)。在不同发行版之间,文件的内容将略有不同(例如,CentOS 7和8与CentOS 6与OpenSUSE)。
以下示例
在CentOS 7上将安装RabbitMQ 3.8的存储库:
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/8/
gpgcheck=0
repo_gpgcheck=0
enabled=1
在CentOS 7上:
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
与CentOS 6相同:
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/6/
gpgcheck=0
repo_gpgcheck=0
enabled=1
以下示例针对OpenSUSE:
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/opensuse/42.1/
gpgcheck=0
repo_gpgcheck=0
enabled=1
以下示例针对SLES 11.x:
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/sles/11
gpgcheck=0
repo_gpgcheck=0
enabled=1
以下示例设置了一个存储库,该存储库将在CentOS 7上安装RabbitMQ 3.7。请注意,RabbitMQ 3.7 在2020年将不再受支持。
[bintray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
具有rpm和已下载的RPM
下载服务器软件包后,以“ root”身份发出以下命令:
rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
#此示例假定软件包的CentOS 8版本。
#对于CentOS 7,将“ el8”替换为“ el7”。
yum install rabbitmq-server-3.8.1-1.el8.noarch.rpm
RabbitMQ公共签名密钥也可以从rabbitmq.com下载:
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
#此示例假定软件包的CentOS 8版本。
#对于CentOS 7,将“ el8”替换为“ el7”。
yum install rabbitmq-server-3.8.1-1.el8.noarch.rpm
下载服务器
在某些情况下,下载软件包并手动安装可能会更容易。该软件包可以从GitHub下载。
描述 | 下载 | 签名 |
---|---|---|
适用于RHEL Linux 8.x,CentOS 8.x,Fedora 28+的RPM(支持systemd) | rabbitmq-server-3.8.1-1.el8.noarch.rpm | 签名 |
适用于RHEL Linux 7.x,CentOS 7.x,Fedora 24+的RPM(支持systemd) | rabbitmq-server-3.8.1-1.el7.noarch.rpm | 签名 |
RHEL Linux 6.x,CentOS 6.x,Fedora之前的RPM 19 | rabbitmq-server-3.8.1-1.el6.noarch.rpm | 签名 |
适用于openSUSE Linux的RPM | rabbitmq-server-3.8.1-1.suse.noarch.rpm | 签名 |
SLES 11.x的RPM | rabbitmq-server-3.8.1-1.sles11.noarch.rpm | 签名 |
运行RabbitMQ服务器
启动服务器
安装RabbitMQ服务器软件包时,默认情况下未将服务器作为守护程序启动。在系统引导时默认启动守护程序,以管理员身份运行
chkconfig rabbitmq-server on
作为管理员,像往常一样启动和停止服务器:
/sbin/service rabbitmq-server start
/sbin/service rabbitmq-server stop
安装完毕,查看RabbMQ状态:service rabbitmq-server status
设置开启启动:sudo chkconfig rabbitmq-server on
开启WEB管理页面:sudo rabbitmq-plugins enable rabbitmq_management
默认WEB管理的登录帐号和密码统一为:guest
默认RabbitMQ拥有如下端口号:
端口号 | 简单说明 |
15672 | HTTP API客户端,管理UI和Rabbitmqadmin (仅在启用了管理插件的情况下) |
5672,5671 | 由不带TLS和带TLS的AMQP 0-9-1和1.0客户端使用 |
4369 | epmd,RabbitMQ节点和CLI工具使用的对等发现服务 |
25672 | 用于节点间和CLI工具通信(Erlang分发服务器端口),并从动态范围分配(默认情况下限制为单个端口,计算为AMQP端口+ 20000)。除非确实需要这些端口上的外部连接(例如,群集使用联合身份验证或在子网外部的计算机上使用CLI工具),否则这些端口不应公开。有关详细信息,请参见网络指南。 |
35672-35682 | 由CLI工具(Erlang分发客户端端口)用于与节点进行通信,并从动态范围(计算为服务器分发端口+ 10000通过服务器分发端口+ 10010)分配。有关详细信息,请参见网络指南。 |
61613, 61614 | 不带TLS和带TLS的STOMP客户端(仅在启用STOMP插件的情况下) |
1883, 8883 | (如果启用了MQTT插件,则不带TLS和具有TLS的MQTT客户端 |
15674 | STOMP-over-WebSockets客户端(仅在启用了Web STOMP插件的情况下) |
15675 | MQTT-over-WebSockets客户端(仅在启用Web MQTT插件的情况下) |
15692 | Prometheus指标(仅在启用Prometheus插件的情况下) |
可以将RabbitMQ配置 为使用不同的端口和特定的网络接口。
一般常用就15672和5672防火墙进行放出端口。
在Linux上控制系统限制
运行生产工作负载的RabbitMQ安装可能需要系统限制和内核参数调整,才能处理相当数量的并发连接和队列。需要调整的主要设置是打开文件的最大数量,也称为ulimit -n。对于消息传递代理,许多操作系统上的默认值都太低(在几个Linux发行版中为1024)。我们建议在生产环境中为用户Rabbitmq至少允许65536个文件描述符。4096应该足以应付许多开发工作负载。
有两个限制:操作系统内核允许的最大打开文件数(fs.file-max)和每个用户的限制(ulimit -n)。前者必须高于后者。
外部访问192.168.153.128:15672/#/users,如下图:
但是此时是登录不了的,默认guest只能localhost访问
但是我们并不直接使用guest,我们新建一个新的用户来操作登录
添加RabbitMQ用户:sudo rabbitmqctl add_user root 123456
帐号:root 密码:123456
赋予RabbitMQ用户角色:sudo rabbitmqctl set_user_tags root administrator
赋予用户默认vhost的全部操作权限:sudo rabbitmqctl set_permissions -p / root "." "." ".*"
查看用户的权限:sudo rabbitmqctl list_user_permissions username
查看全部用户:sudo rabbitmqctl list_users
此操作删除guest用户,我们自己创建新的用户来使用
删除用户:sudo rabbitmqctl delete_user guest
最后一步,操作完毕,要记得重启,记得重启,记得重启。三遍
service rabbitmq-server restart
重启后我们再访问:http://192.168.153.128:15672/#/users进行登录
至此,安装结束。。。。
日志文件和管理
服务器日志位于可配置目录下,当通过Linux软件包管理器安装RabbitMQ时,该目录通常默认为/var/log/rabbitmq。
RABBITMQ_LOG_BASE可用于覆盖日志目录位置。
本文参考:
https://www.rabbitmq.com/install-rpm.html#install-erlang
https://www.erlang-solutions.com/resources/download.html