rabbitmq 是基于 AMQP 协议的一种消息队列服务器。AMQP,即Advanced Message Queuing Protocol
,一个提供统一消息服务的应用层标准高级消息队列协议。RabbitMQ 在小型创业公司和大型企业中有超过 3.5 万的生产部署,RabbitMQ 是最受欢迎的开源消息代理。
RabbitMQ 是轻量级的,并且可以很容易地部署在前提和云中。它支持多个消息传递协议。RabbitMQ 可以部署在分布式和联邦配置中,以满足高规模、高可用性需求。
RabbitMQ 在许多操作系统和云环境中运行,并为大多数流行语言提供了广泛的开发工具。
Rabbitmq 主要有以下几个特点:
- 异步消息传递,支持多种消息传递协议、消息排队、交付确认、灵活路由到队列、多种交换类型。
- 开发者友好,与BOSH、Chef、Docker和 Puppet 一起部署。使用最喜欢的编程语言开发跨语言的消息传递,例如:Java、.NET、PHP、Python、JavaScript、Ruby、Go,以及其他许多语言。
- 分布式部署,作为集群部署,以获得高可用性和吞吐量;联合多个可用区域和区域。
- 企业级 & 云,插入式的身份验证、授权、支持TLS和LDAP。轻量级且易于在公共云和私有云中部署。
- 工具和插件,支持持续集成、操作度量和集成到其他企业系统的各种工具和插件。灵活的插件方法来扩展 RabbitMQ 功能。
- 管理和监控,HTTP-API,命令行工具,以及用于管理和监控 RabbitMQ 的 UI。
下面是 Rabbitmq 的架构图:
这里面包含了 4 个角色:
- Provider : 消息的创建者,发送到amqp的消息中间件
- Consumer : 连接到amqp的消息中间件,订阅到队列上,进行消息的消费。分为持续订阅(basicConsumer)和单条订阅(basicGet)
- Queue:队列是位于 RabbitMQ 内的一个邮筒的名称。尽管消息通过 RabbitMQ 和你的应用程序传递,但它们只能存储在队列中。队列只受主机的内存和磁盘限制的限制,它本质上是一个大的消息缓冲区。许多生产者可以发送到一个队列的消息,许多消费者可以尝试从一个队列接收数据
- Exchange:队列通过路由键(routing key,某种确定的规则)绑定到交换器,生产者把消息发送到了交换器,交换器根据绑定的路由键将消息路由到特定的队列,订阅了队列的消费者进行接收。你可能想
我只想让消息到达队列而已
,但是发布与订阅或者多播场景,就可以通过交换机轻松实现。
因为 Rabbitmq 是使用 erlang 写的,所以在 linux 系统中运行 Rabbitmq 需要安装 erlang 环境。之前我在 centos 7 虚拟机安装 erlang 21 ,然后再安装 rabbitmq-server 一直报错:安装的时候会提示需要erlang版本 >= 19.3。
然后再网上搜索找到了一篇文章解决这个问题。它是直接把 erlang 环境依赖加到了 yum 源中在安装 Rabbitmq 的时候,直接就安装了依赖的 erlang 环境。
1、erlang 添加 yum 源中
添加 rabbitmq-eralng 依赖到 yum 源中,安装 rabbitmq-server 的时候会依赖安装 erlang 环境。
#vim /etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
#yum clean all
#yum makecache
2 安装 rabbitmq
然后到 官方网站 下载 RabbitMQ 的 RPM包. 使用 yum 进行安装,yum 会自动去源里安装依赖包
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3.7.7-1.el7.noarch.rpm
yum install rabbitmq-server-3.7.7-1.el7.noarch.rpm
3、启动 Rabbitmq
# 启动RabbitMQ服务
service rabbitmq-server start
# 状态查看
rabbitmqctl status
# 启用插件
rabbitmq-plugins enable rabbitmq_management
# 重启服务
service rabbitmq-server restart
# 添加帐号:name 密码:passwd
rabbitmqctl add_user name passwd
# 赋予其administrator角色
rabbitmqctl set_user_tags name administrator
# 设置权限
rabbitmqctl set_permissions -p / name ".*" ".*" ".*"
然后进入 http://ip:15672 进入web管理页面了(外部访问别忘记修改防火墙)。
参考地址: