你是否听说过或者使用过队列?
你是否听说过或者使用过消息队列?
你是否听说过或者使用过RabbitMQ?
提到这几个词,用过的人,也许觉得很简单,没用过的人,也许觉得很复杂,至少在我没使用消息队列之前,听别人提到消息队列,都感觉很复杂,很高深。
好了,言归正传,本篇博客我们就讲解下什么是消息队列,RabbitMQ环境的安装配置,最后通过一个Hello World示例了解下RabbitMQ的使用方法。
1. 基本概念讲解
1.1 队列(Queue)
队列是常用的数据结构之一,是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
进行插入操作的端称为队尾,进行删除操作的端称为对头。
1.2 消息队列(Message Queue)
消息是计算机/应用间传送的数据单位,可以非常简单,例如只包含文本字符串,也可以很复杂,可能包含嵌入对象。
消息队列是在消息的传输过程中保存消息的容器。
消息传输时,先发送到队列,队列的主要目的是提供路由并保证消息的传递,如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功的传递它。
可以把消息队列理解成快递公司,你需要寄一个物件(消息)给你的朋友,快递公司收到物件会保证物件送到你的朋友手中,可能存在多次寄送才送达成功的情况,比如第一次送过去,你朋友不在家。
也许有人好奇,为什么我们不直接使用JDK自带的队列,而是要使用消息队列呢?
这是因为JDK自带的队列都存储在内存中,一但应用或者服务器挂了,消息就丢失了,使用消息队列可以避免消息丢失问题(注意不是100%不丢失),就像快递公司会保证你的物件寄到你的朋友手中,但肯定有丢件的几率。
1.3 RabbitMQ
RabbitMQ是用Erlang语言开发的基于高级消息队列协议(AMQP)的消息队列中间件。
因为它开源,而且版本更新快,所以在国内互联网公司被广泛使用。
其它使用的消息中间件还有ActiveMQ,RocketMQ,Kafka等,有兴趣的同学可以自行研究。
还有2个专业术语要了解下:
生产者:发送消息的应用程序被称为生产者。
消费者:接收消息的应用程序被称为消费者。
2. RabbitMQ安装及配置
了解完基本概念,让我们在本机上安装下RabbitMQ,因为它是基于Erlang语言开发的,所以我们要先安装Erlang。
2.1 Erlang安装及配置
Erlang下载地址:http://www.erlang.org/downloads
这里我们的机器是CentOS 7.8系统,由于RabbitMQ依赖的Erlang版本需大于等于21.3.所以我们下载
esl-erlang_21.3.8.16-1_centos_7_amd64.rpm
[root@k8snode1 ~] wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_64/esl-erlang_21.3.8.16-1~centos~7_amd64.rpm
[root@k8snode1 ~] rpm -Uvh esl-erlang_21.3.8.16-1_centos_7_amd64.rpm
现在我们安装rabbitMQ
配置rabbitmq的yum源
vim /etc/yum.repos.d/rabbit.repo
[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
yum makcache fast
yum install rabbitmq-server -y
这样我们就安装好了rabbitMQ
查看下安装了哪些东西
rpm -ql rabbitmq-server
/etc/logrotate.d/rabbitmq-server
/etc/profile.d/rabbitmqctl-autocomplete.sh
/etc/rabbitmq
........
/var/lib/rabbitmq
/var/lib/rabbitmq/mnesia
/var/log/rabbitmq
/usr/lib/systemd/system/rabbitmq-server.service
/usr/lib/tmpfiles.d/rabbitmq-server.conf
/usr/sbin/rabbitmq-diagnostics
/usr/sbin/rabbitmq-plugins
/usr/sbin/rabbitmq-queues
/usr/sbin/rabbitmq-server
/usr/sbin/rabbitmq-upgrade
/usr/sbin/rabbitmqctl
这里我们可以看到/usr/lib/systemd/system/rabbitmq-server.service这个是rabbitmq的启停配置脚本,脚本内容如下
[Unit]
Description=RabbitMQ broker
After=syslog.target network.target
[Service]
Type=notify
User=rabbitmq
Group=rabbitmq
UMask=0027
NotifyAccess=all
TimeoutStartSec=600
# To override LimitNOFILE, create the following file:
#
# /etc/systemd/system/rabbitmq-server.service.d/limits.conf
#
# with the following content:
#
# [Service]
# LimitNOFILE=65536
LimitNOFILE=32768
# Note: systemd on CentOS 7 complains about in-line comments,
# so only append them here
#
# Restart:
# The following setting will automatically restart RabbitMQ
# in the event of a failure. systemd service restarts are not a
# replacement for service monitoring. Please see
# https://www.rabbitmq.com/monitoring.html
Restart=on-failure
RestartSec=10
WorkingDirectory=/var/lib/rabbitmq
ExecStart=/usr/sbin/rabbitmq-server
ExecStop=/usr/sbin/rabbitmqctl shutdown
# See rabbitmq/rabbitmq-server-release#51
SuccessExitStatus=69
[Install]
WantedBy=multi-user.target
启动rabbitMQ
systemctl start rabbitmq
rabbitmq-server -detached