RabbitMQ 1:RabbitMQ的基础(上)

简介

  • RabbitMQ 是一种轻量级的、功能非常强大的工具,可用来构建十分简单抑或异常复杂的分布式软件架构。是一款消息中间件。
  • RabbitMQ 成为时下最流行的消息代理服务器( message broker )之一。
  • 作为一款由 Erlang 语言开发的开源软件项目, RabbitMQ 具有自由度以及灵活性,

RabbitMQ 的特性及好处:

  • ① 开源
  • ② 平台和供应商无关性

    作为实现了具有平台和供应商无关性的高级消息队列协议 (Advanced Message Queuing Protocal, AMQP ) 规范的一种消息代理服务器,RabbitMQ 为几乎全部开发语言提供了客户端工具并能运行在所有主流计算机平台上。

  • ③ 轻量级

    RabbitMQ 是轻 级的,运行 RabbitMQ 核心功能以及诸如管理界面的插件只需要不到 40MB 内存。请注意往队列中添加消息可能会增加其内存使用量。

  • ④ 面向大多数现代语言的客户端开发库

    作为代理服务器, RabbitMQ 提供了 种引人注目的编程模式,其客户端开发库的目标是支持绝大多数编程语言并能运行于多个平台。

    当你通过编程与 RabbitMQ 进行通信时,不受任何供应商或开发语言的限制。

    事实上,当由不同语言实现的应用程序之间需要交互时,把 RabbitMQ 当作核心组件的场景并不少见 RabbitMQ 为不同的开发语言之间进行跨操作系统和环境的数据共享提供了 种有用的桥梁,这些语言包括 Java Ruby 、Python、PHP、 JavaScript 和 C#等。

  • ⑤ 灵活控制消息通信的平衡性

    在消息吞吐和性能上,RabbitMQ 提供了一种灵活性用于控制这两者在可靠消息通信上的平衡。因为它并不是一种“适合所有场景”的应用,消息在投递之前可以指定为是否持久化到硬盘,如果在一个集群中,队列可以被设置成高可用,即消息会存储在多台服务器中确保在某台服务器岩机时不会

    丢失。

  • ⑥ 高延迟性环境插件

    因为不是所有的网络拓扑和架构都是一样的, RabbitMQ 支持在低延迟环境下的消息通信机制,也提供了针对如互联网的高延迟环境下的插件。

    这就使得 RabbitMQ 可以在同一个本地网络或者在跨越多个数据中心的共享互联( federated )机制下构建消息集群。

  • ⑦ 第三方插件

    作为应用集成的 个关键要 RabbitMQ 提供了灵活的插件系统。

    例如, 当需要 RabbitMQ 进行数据库直接写入时,就可以使用第三方插件把消息接存储到数据库中。

  • ⑧ 多层安全

    在 RabbitMQ 的多个层次中包含着安全性设计。

    客户端连接可以通过使用 SSL 通信和客户端证书验证以提高安全性。

    在虚拟主机( virtual-host )层可以管理用户访 问,从而在较高层次实现消息和资源的隔离 。

    另 外,通过配置可 以使用正则表达式模式匹配的方式控制从队列中读取消息和把消息写入交换器的过程。

RabbitMQ 中的两个最基本的特性:

① 实现语言( Erlang )

② 所基于的模型 (高级消息队列模型〉,该模型提供了定义 RabbitMQ 中大多数专业术语和行为的规范

消息中间件:

消息中间件(Message-oriented middleware , MOM) 是一种软件或硬件基础设施,通过它可以在分布式系统中发送和接受消息。

RabbitMQ 通过高级路由和消息分发功能巧妙地实现了这一角色,即使需要满足广域网(Wide Area Neteork,WAN)环境下实现可靠性所应达到的容错条件,分布式系统也可以很容易与其他系统进行交互。

松耦合架构的优势:

  • ① 解耦应用

    对于一些以数据为中心的灵活应用架构的组织而言,使用消息中间件可以获得极大的优势。通过向基于 RabbitMQ 的松耦合设计迁移,应用架构不再受限于数据库写入的性能瓶颈。当应用与数据库交互时,紧耦合应用必须等待数据库服务器响应才能进行下一步操作。

  • ② 解耦数据库写入

    紧耦合架构中,应用在完成一个事务之前必须等待数据库服务器的响应。这样的设计无论是在同步还是异步中都存在潜在的性能瓶颈,一旦数据库服务应为缺少优化或者硬件问题而出现性能下降,那么应用相应速度也会随之变慢,如果数据库停止响应或者宕机,应用也会随着发生宕机。

    通过将数据库从应用中解相出来,就可以创建一种松耦合架构。在这种架构中,作为消息中间件的 RabbitMQ 扮演一个中介角色,即处理入库操作之前的数据 消费者从 RabbitMQ 服务器中获取数据,然后执行与数据库相关的操作。

    在这 模型中,如果数据库需要进行离线维护,或者写入负载量变得太大,就可以对消费者应用程序实行限流或者直接关闭。在消费者能够接收消息之前,这些数据都会保存在队列中,这种暂停或限流消费者应用程序的行为就是这类松耦合架构的优势。

    松耦合应用使得原本把数据直接存在数据库中的应用能够把数据发送到 RabbitMQ ,从未实现异步。

  • ③ 无缝添加新功能

    松耦合架构同样允许 RabbitMQ 对同一份数据进行重复利用。原本只被写到数据库中的数据可以被用作其他目的。 RabbitMQ 会处理所有的消息副本内容,并将它们路由到多个消费者以满足不同的处理目标。

    比如,通过使用 RabbitMQ 可以将同一份数据同时发送到新的云服务和原本的数据库,发布者应用程序不需要做任何改变。

高级消息队列模型 AMQ

  • RabbitMQ 的很多强大功能和灵活性来自于 AMQP 规范。不像 HTTP SMTP 协议,AMQP 规范不仅定义了一种网络协议,同时也定义了服务器端的服务和行为。这些信息就是高级消息队列(Advanced Message Queuing, AMQ )模型。
  • 针对代理服务器软件, AMQ 模型在逻辑上定义了三种抽象组件用于指定消息的路由行为:

    ① 交换器(Exchange):消息代理服务器中用于把消息路由到队列的组件。

    一个交换器接收发送到 RabbitMQ 中的消息,并决定把他们投递到何处。交换器定义消息的路由行为,通常这需要检查消息所携带的数据特性或者包含在消息体内的各种属性。

    RabbitMQ 拥有多种交换器类型,每一种类型具备不同的路由行为。另外它还提供了一种可用于自定义交换器的插件架构。

    当发布者发布消息到 RabbitMQ 时消息首先到达的是一个交换器。

    ② 队列(Queue):用来存储消息的数据结构,位于硬盘或内存中。

    负责存储接收到的消息,同时也可能包含如何处理消息的配置信息。队列可以把消息只存储在内存中,也可以存储在磁盘中,然后以先进先出(FIFO)的顺序进行投递。

    ③ 绑定(Binding):一套规则,用于告诉交换器消息应该被存储到哪个队列。

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值