一、前言
是否遇到过需要在两个或多个系统中设置定时任务,来同步某些数据?是否遇到过需要提高业务逻辑的执行效率,增强用户体验感,而对与业务逻辑不相关,但与我们系统有关的一些逻辑进行异步处理?如果遇到过,那么恭喜你,消息中间件可以为你解决这些问题;
RabbitMQ是当前最主流的消息中间件之一;
二、RabbitMQ简介
1、什么是AMQP?
- AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的生产者无需知道消息的消费者的存在,反之亦然;
- AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全;
2、RabbitMQ是什么?
- RabbitMQ是一个开源的AMQP实现,服务器端用Erlang的语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
3、RabbitMQ包括哪些核心对象?
-
Server:又称Broker,接收客户端的连接,实现AMQP实体服务;
-
Conncetion:RabbitMQ的socket连接,它封装了socket协议相关部分逻辑;
-
ConncetionFactory:Connection的制造工厂;
-
Channel:网络通道,几乎所有操作都在Channel中进行,是进行读写的通道,客户端可建立多个Channel,每个Channel代表一个会话任务;
-
为什么要建立多个Channel?
因为一些应用程序需要多个连接到服务器,如果每次连接都要建立TCP连接,那样不但浪费资源,而且使得防火墙的配置变得十分困难。AMQP使用通道来实现多路传输,通道可以被认为是共享一个TCP连接的轻量级连接;
客户端进行的每个协议操作都发送在一个通道上,每个通道的通信都是相互隔离,因此每个协议方法都携带一个通道ID,它是一个整数,被服务器和客户端用来区分方法该用于哪个通道;当一个连接被关闭时,它所属的所有通道都会被关闭;
PS:Queue与Exchange的声明和绑定,都是在Channels中进行的; -
Message:消息,服务器与应用程序之间传递的数据,由Properties和Body组成, Properties可以对消息进行修饰,如消息的优先级、传输格式(如JSON)、延迟等高级特性,Body则就是消息体内容;Message的详解
-
Virtual Host:虚拟地址,用于进行逻辑隔离,最上层的消息路由,一个 Virtual Host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange或Queue;Virtual Host作用及角色权限
-
Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列;Exchange的详解
-
Queue:也称为Message Queue队列,保存消息并将它们转发给消费者; Queue的详解
-
Routing Key:路由规则,虚拟机可以用来确认路由到哪个队列;
-
Bingding:Exchange和Queue之间的虚拟连接;