官方网站:https://www.rabbitmq.com
RabbitMQ拥有数万计的用户,是最受欢迎的开源消息队列之一,从T-Mobile到Runtastic,RabbitMQ在全球范围内用于小型初创企业和大型企业。
RabbitMQ轻量级,易于在本地和云端部署,它支持多种消息协议。RabbitMQ可以部署在分布式和联合配置中,以满足大规模、高可用性要求。
RabbitMQ在许多操作系统和云环境中运行,并为大多数流行语言提供了广泛的开发者工具。
我们首先还是来看看如何进行安装。
安装消息队列
下载地址:Downloading and Installing RabbitMQ — RabbitMQ
由于除了消息队列本身之外还需要Erlang环境(RabbitMQ就是这个语言开发的)所以我们就在我们的Ubuntu服务器上进行安装。
首先是Erlang,比较大,1GB左右:
sudo apt install erlang
接着安装RabbitMQ:
sudo apt install rabbitmq-server
安装完成后,可以输入:
sudo rabbitmqctl status
来查看当前的RabbitMQ运行状态,包括运行环境、内存占用、日志文件等信息:
Runtime
OS PID: 13718
OS: Linux
Uptime (seconds): 65
Is under maintenance?: false
RabbitMQ version: 3.8.9
Node name: rabbit@ubuntu-server-2
Erlang configuration: Erlang/OTP 23 [erts-11.1.8] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:64]
Erlang processes: 280 used, 1048576 limit
Scheduler run queue: 1
Cluster heartbeat timeout (net_ticktime): 60
这样我们的RabbitMQ服务器就安装完成了,要省事还得是Ubuntu啊。
可以看到默认有两个端口名被使用:
Listeners
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
我们一会主要使用的就是amqp协议的那个端口5672
来进行连接,25672是集群化端口,之后我们也会用到。
接着我们还可以将RabbitMQ的管理面板开启,这样话就可以在浏览器上进行实时访问和监控了:
sudo rabbitmq-plugins enable rabbitmq_management
再次查看状态,可以看到多了一个管理面板,使用的是HTTP协议:
Listeners
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
Interface: [::], port: 15672, protocol: http, purpose: HTTP API
我们打开浏览器直接访问一下:
可以看到需要我们进行登录才可以进入,我们这里还需要创建一个用户才可以,这里就都用admin:
sudo rabbitmqctl add_user 用户名 密码
将管理员权限给予我们刚刚创建好的用户:
sudo rabbitmqctl set_user_tags admin administrator
创建完成之后,我们登录一下页面:
进入了之后会显示当前的消息队列情况,包括版本号、Erlang版本等,这里需要介绍一下RabbitMQ的设计架构,这样我们就知道各个模块管理的是什么内容了:
- 生产者(Publisher)和消费者(Consumer):不用多说了吧。
- Channel:我们的客户端连接都会使用一个Channel,再通过Channel去访问到RabbitMQ服务器,注意通信协议不是http,而是amqp协议。
- Exchange:类似于交换机一样的存在,会根据我们的请求,转发给相应的消息队列,每个队列都可以绑定到Exchange上,这样Exchange就可以将数据转发给队列了,可以存在很多个,不同的Exchange类型可以用于实现不同消息的模式。
- Queue:消息队列本体,生产者所有的消息都存放在消息队列中,等待消费者取出。
- Virtual Host:有点类似于环境隔离,不同环境都可以单独配置一个Virtual Host,每个Virtual Host可以包含很多个Exchange和Queue,每个Virtual Host相互之间不影响。