基本概念
AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。
RabbitMQ是采用Erlang语言实现AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等。
什么是消息中间件
消息(Message)是指在应用间传送的数据,消息可以很简单,如:文本字符串、JSON等,也可以很复杂,如:内嵌对象等。
消息队列中间件(Message Queue Middleware,简称MQ)是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成,通过提供消息传递和消息排队模型,可以在分布式环境下扩展进程间的通信。
消息队列中间件,也可成为消息队列或者消息中间件,它一般有二种传递模式:
1.点对点(P2P,Point-to-Point)模式
点对点模式是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息,队列的存在使得消息的异步传输成为可能。
2.发布/订阅(Pub/Sub)模式
发布订阅模式定义了如何向一个内容节点发布和订阅消息,这个内容节点成为主题,主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息的订阅者则从主题中订阅消息。主题使得消息的订阅和消息的发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模式在消息的一对多广播时采用。
主要特性
-
可伸缩性:集群服务
-
消息持久化:从内存持久化消息到硬盘,再从硬盘加载到内存
-
可靠性:使用一些机制来保证可靠性,如持久化、传输确认及发布确认等;
-
灵活的路由:在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ已经提供了一些内置的交换器来实现;
-
扩展性:多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点;
-
高可用性:队列可以在集群中的机器上设置镜像,使得在部分 节点出现问题的情况下队列仍然可用;
-
多种协议:RabbitMQ除了原生支持AMQP协议,还支持 STOMP、MQTT等多种消息中间件协议;
-
多语言客户端:RabbitMQ几乎支持所有常用语言,比如Java、 Python、Ruby、PHP、C#、JavaScript等;
-
管理界面:RabbitMQ提供了一个易用的用户界面,使得用户 可以监控和管理消息、集群中的节点等;
-
插件机制:RabbitMQ提供了许多插件,以实现从多方面进行 扩展,当然也可以编写自己的插件。
RabbitMQ 核心概念
- Publisher:生产者,消息的发送方。
- Connection:网络连接。
- Channel:信道,多路复用连接中的一条独立的双向数据流通道。
- Exchange:交换器(路由器),负责消息的路由到相应队列。
- Binding:队列与交换器间的关联绑定。消费者将关注的队列绑定到指定交换器上,以便Exchange能准确分发消息到指定队列。
- Queue:队列,消息的缓冲存储区。
- Virtual Host:虚拟主机,虚拟主机提供资源的逻辑分组和分离。包含连接,交换,队列,绑定,用户权限,策略等。
- Broker:消息队列的服务器实体。
- Consumer:消费者,消息的接收方。
RabbitMQ安装
原始的安装方法有点复杂,现在有一个强大的东西叫Docker, 直接用docker一键安装快速方便。如果不会用docker的话请点击这里的教程安装学习。这里就假设已经成功安装了docker.
1.首先来到docker hub首页:https://hub.docker.com/ ,搜索RabbitMQ,如下:
找到Management Plugin,复制下列命令
然后打开命令框,先开启docker,然后将刚才复制的命令粘进去,此处的 -P 是随机端口,便于测试
[root@localhost lemon]# service docker start
Redirecting to /bin/systemctl start docker.service
[root@localhost lemon]# docker run -d --hostname my-rabbit --name some-rabbit -P rabbitmq:3-management
f5eb3c4645a2b844253021210a171143eeadac912f21a8c9d7be0f8371fcad2e
然后看有没有跑起来,如下:
[root@localhost lemon]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f5eb3c4645a2 rabbitmq:3-management "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:32773->4369/tcp, 0.0.0.0:32772->5671/tcp, 0.0.0.0:32771->5672/tcp, 0.0.0.0:32770->15671/tcp, 0.0.0.0:32769->15672/tcp, 0.0.0.0:32768->25672/tcp some-rabbit
这里的15672为管理端口,映射到了32769端口。通信端口为 5672,映射到了32771 端口,浏览器输入:http://192.168.1.132:32769
如果看到上面页面就说明你的rabbitmq已经安装好了,默认用户名密码为:guest ,点击登录。如下:
登陆成功页面。