文章目录
1 RabbitMQ介绍
1 AMQP 和 JMS
MQ是消息通信的模型;实现MQ的大致有两种主流方式:AMQP、JMS。
- AMQP,即 Advanced Message Queuing Protocol(高级消息队列协议),是一个网络协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。2006年,AMQP 规范发布。AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议)。这是其和JMS的本质差别,AMQP不从API层进行限定,而是直接定义网络交换的数据格式。
- JMS即Java消息服务(JavaMessage Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
AMQP 与 JMS 区别
- JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
- JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
- JMS规定了两种消息模式;而AMQP的消息模式更加丰富
市场上常见的消息队列有如下:
- ActiveMQ:基于JMS
- ZeroMQ:基于C语言开发
- RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好
- RocketMQ:基于JMS,阿里巴巴产品
- Kafka:类似MQ的产品;分布式消息系统,高吞吐量
1.2 RabbitMQ介绍
RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。
RabbitMQ官方地址:http://www.rabbitmq.com/
RabbitMQ提供了6种模式:简单模式
,work模式
,Publish/Subscribe发布与订阅模式
,Routing路由模式
,Topics主题模式
,RPC远程调用模式(远程调用,不太算MQ;暂不作介绍)
;
官网对应模式介绍:https://www.rabbitmq.com/getstarted.html
RabbitMQ 中的相关概念
- Broker:接收和分发消息的应用,RabbitMQ Server就是 Message Broker
- Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个vhost,每个用户在自己的 vhost 创建 exchange/queue 等。
- Connection:publisher/consumer 和 broker 之间的 TCP 连接。
- Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP - Connection的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销
RabbitMQ 的基础架构
-
生产者(应用)通过
用户名和密码
和broker 之间的 TCP 连接 -
用户名和密码
会绑定具体的虚拟主机(Virtual host),消息将会投递到这个虚拟主机rabbitMQ设计希望应用之间通过虚拟主机进行隔离,每个虚拟主机可以设置用户名和密码做到安全控制。所以我们在开发的时候需要先去建一个账户绑定虚拟主机,其中rabbitMQ默认提供了一个来宾用户可以访问所有的虚拟主机
-
消息通过交换机和路由分配到消息队列中,最终消费者也通过
用户名和密码
拿到消息进行消费rabbitMQ提供了多种模式,有些模式可以不走交换机直接投递到具体的消息队列。
2 安装
2.1 Mac 安装
官网安装教程:https://www.rabbitmq.com/install-homebrew.html
- 安装HomeBrew,brew官网
- 使用brew安装rabbitmq
brew install rabbitmq
-
安装目录:
/usr/local/Cellar/rabbitmq/3.6.6
-
/usr/local/sbin
配置到环境变量
export PATH=$PATH:/usr/local/sbin
- 启动服务
rabbitmq-server
或者
brew services start rabbitmq # 启动
brew services stop rabbitmq # 停止
brew services restart rabbitmq
- 访问后台管理:
http://localhost:15672/
用户名和密码默认都是:guest