【RabbitMQ特性】

高性能 稳定支持集群化的消息代理服务器,可以构建大规模消息架构

轻量级、开源、平台和供应商无关、面向大多数语言的客户端开发库、灵活控制消息吞吐量和性能上的平衡、提供低延迟和高延迟环境下的消息通信机制、支持第三方插件系统、安全性高

【基于Erlang语言】

Erlang被设计成一种分布式、高容错的软实时系统,用于构建高可用性应用程序;

Erlang专注节点之间的消息通信的轻量级进程,提供了状态无关的高并发性。

【实时系统】

用于满足某个事件必须返回相应的需求。

【软实时系统】

在任务执行过程中,为了那些更重要的任务会牺牲部分非重要任务的时效性。


RabbitMQ集群的服务器利用Erlang进程间通信系统;Erlang IPC系统使用TCP/IP 协议在两台RabbitMQ服务器之间实现通信。

【基于AMOP规范】

AMOP定义了RabbitMQ交互的点对点协议,也描述了RabbitMQ核心功能的逻辑模型。

通过AMOP,RaabitMQ成为一个与供应商无关,平台独立的解决方案,可以实现灵活的消息路由,配置化的消息持久化以及跨数据中心通信。

【松耦合架构】

【紧耦合架构】在紧耦合架构中,应用在完成一个事物之前必须等待数据库服务器的响应。这样的设计无论在同步还是异步应用中都存在潜在的性能瓶颈。

一旦服务器因为缺少优化或硬件问题出现性能下降,那么响应速度会随之变慢。

【解耦数据库写入】

通过将数据库从应用中解耦出来,就可以创建一种松耦合架构。在这种架构中,作为消息中间件的RabbitMQ扮演着一个中介角色,即处理入库操作之前的数据。

消费者从RabbitMQ服务器中获取数据,然后执行与数据库相关的操作。

在这个模型中,如果数据库需要进行离线维护,或者写入负载量过大,就可以对消费者应用程序实行限流或者直接关闭。

在消费者能够接受消息之前,这些数据都会保存在队列中。

【无缝添加新功能】

松耦合架构同样允许RabbitMQ对同一份数据进行重复利用。

RabbitMQ会处理所有的消息副本内容,并将它们路由到多个消费者以满足不同的处理目标。

【复制数据和事件】

RabbitMQ提供了跨数据中心进行数据分发的内置工具,支持应用之间的互联化消息投递和同步。

互联提供了从本地RabbitMQ向远程RabbitMQ发送消息的机制,并负责处理广域网容错性和网络突变,

通过使用RabbitMQ互联插件,在另外一个数据中心中添加一台RabbitMQ服务器或集群就变得非常容易。

【RabbitMQ笔记】RabbitMQ基础_数据

 【多主互联化数据与事件】

上图中,在2号数据中心,通过添加相同的前端应用,然后设置RabbitMQ服务器为双向接收互联数据,可以创建分布在不同物理位置的高可用应用。

位于任意数据中心的应用产生的消息将被同时发送到两个数据中心的消费者哪里,从而实现在数据存储和处理上的冗余机制。

应用架构的这一构建方式为应用提供了水平拓展和用户地域无关性,同时为基础设施实现分布式处理提供了一种高性价比的解决方案。

【RabbitMQ笔记】RabbitMQ基础_java-rabbitmq_02

 【高级消息队列模型】

AMQP规范不仅定义了网络协议,还定义了服务器端的服务和行为,即高级消息队列(AMQ)模型。

AMQ模型在逻辑上定义了三种抽象组件用于指定消息的路由行为:

RabbitMQ的灵活性来自于如何通过交换器路由到队列的动态特性。介于交换器和队列之间的绑定,以及它们所创建的动态消息路由,构成了消息通信架构的基本组件。、

【交换器】

交换器是AMQ模型定义的三种组件之一。一个交换器接受发送到RabbitMQ的消息并决定把它们投递到何处。

交换器定义消息的路由行为,通常这需要消息所携带的数据特性或者包含在消息体内的各种属性。

RabbitMQ拥有多种交换器类型,每一种类型具备不同的路由行为。

另外,RabbitMQ也提供了一种可用于自定义交换器的插件架构。

【RabbitMQ笔记】RabbitMQ基础_java_03

【队列】

负责存储接收到的消息,同时也可能包含如何处理消息的配置信息。

消息可以存储在内存中或硬盘中。然后以先进先出的顺序进行投递。

【绑定】

AMQ模型使用绑定(binding)来定义队列和交换器之间的关系。

绑定或绑定键(binding-key)告知一个交换器应该将消息投递到哪些队列中。

对于某些交换器类型,绑定同时告知交换器如何对消息进行过滤从而决定能够投递到队列的消息。

当发布一条消息到交换器时,应用程序使用路由键属性。

路由键可以是队列名称,也可以是一串用于描述消息,具有特定语法的字符串,当交换器对一条消息进行评估以决定路由到哪些合适的队列时,消息的路由键就会和绑定键进行比对。