1、RabbitMQ学习笔记—初识消息中间件

消息中间件

消息、消息中间件

**消息 (Message)**是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串、JSON 等,也可以很复杂,比如内嵌对象。
消息队列中间件 (Message Queue Middleware ,简称为 MQ) 也成消息队列或者消息中间件,是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传和消息排队模型,它可以在分布式环境下扩展进程间的通信。分为点对点(P2P)和发布/订阅(PS)两种传递模式。
点对点模式是基于队列的,消息生产着发送消息到队列,消息消费者从队列中接受消息,队列的存在使得消息的异步传输成为可能。
发布订阅模式定义了如何向一个内容节点发布订阅消息,这个内容节点称为主题(topic) ,主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息订阅者则从主题中订阅消息。主题使得消息的订阅者与消息的发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模式在消息的一对多广播时采用。

作用

消息中间件凭借其独到的特性,在不同的应用场景下可以展现不同的作用。总的来说,消息中间件的作用可以概括如下。

  1. 解偶:在项目启动之初来预测将来会碰到什么需求是极其困难的。消息中间件在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口,这允许你独立地扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束即可。
  2. 冗余〈存储) : 有些情况下,处理数据的过程会失败。消息中间件可以把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。在把一个消息从消息中间件中删除之前,需要你的处理系统明确地指出该消息己经被处理完成,从而确保你的数据被安全地保存直到你使用完毕。
  3. 扩展性: 因为消息中间件解捐了应用的处理过程,所以提高消息入队和处理的效率是很容易的,只要另外增加处理过程即可,不需要改变代码,也不需要调节参数。
  4. 削峰: 在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费。使用消息中间件能够使关键组件支撑突发访问压力,不会因为突发的超负荷请求而完全崩惯。
  5. 可恢复性: 当系统一部分组件失效时,不会影响到整个系统。消息中间件降低了进程间的稿合度,所以即使一个处理消息的进程挂掉,加入消息中间件中的消息仍然可以在系统恢复后进行处理。
  6. 顺序保证: 在大多数使用场景下,数据处理的顺序很重要,大部分消息中间件支持一定程度上的顺序性。
  7. 缓冲: 在任何重要的系统中,都会存在需要不同处理时间的元素。消息中间件通过一个缓冲层来帮助任务最高效率地执行,写入消息中间件的处理会尽可能快速。该缓冲层有助于控制和优化数据流经过系统的速度。
  8. 异步通信: 在很多时候应用不想也不需要立即处理消息。消息中间件提供了异步处理机制,允许应用把一些消息放入消息中间件中,但并不立即处理它,在之后需要的时候再慢慢处理

主流的消息中间件

目前开源的消息中间件有很多,比较主流的有RabbitMQ 、Kafka、ActiveMQ 、RocketMQ等。面向消息的中间件(简称为MOM ,Message Oriented Middleware) 提供了以松散藕合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送,即应用程序彼此不直接通信,而是与作为中介的消息中间件通信。消息中间件提供了有保证的消息发送,应用程序开发人员无须了解远程过程调用(RPC) 和网络通信协议的细节。
MQ衡量指标:服务性能、数据存储、集群架构。

ActiveMQ

ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线,并且它一个完全支持JMS规范的消息中间件。
其丰富的API、多种集群构建模式使得它成为业界老牌的消息中间件,在中小型企业中应用广泛。
目前,activeMQ相较于其他消息队列中间件来说,性能一般,现在开发一些大数据高并发互联网应用,如果选择ActiveMQ作为消息队列中间件,就显得力不从心了。如果并发量要求不是很高的情况下,该选择也是不错的一款中间件,对于集群搭建,和其他架构进行整合方案较为完善。
ActiveMQ包含两种架构模式,一是:Master-Salve模式,第二种是NetWork模式。

在这里插入图片描述
Master-Salve模式,也叫主备模式,通过zookeeper进行节点(多结点)之间的协调,但是只有Master节点对外进行服务,其他Slave节点只有当主节点挂掉的时候,才会通过zookeeper根据特定的算法选出一个作为主节点使用,继续对外提供服务。
在这里插入图片描述
Net_work 模式,通过上图可以了解到,它其实是两个Master-Slave模式通过网关集群配置实现分布式。

Kafka

Kafka是linedln开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制、不支持事务,对消息的重复、丢失、错误没有严格要求,适合生产大量数据 的互联网服务额数据收集业务。

在这里插入图片描述
kafka集群配置,不同服务之间通过replicate进行消息同步,一定程度上可以防止消息的丢失问题,但是kafka设计之处就是为了高性能。

RocketMQ

RocketMQ是阿里开源额消息中间件,目前也已经孵化为Apache顶级项目,它是纯java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。RocketMQ的维护是一个痛点,它需要一个专业运维团队来做。
RocketMQ 的特点:

  • 保障消息的顺序性
  • 丰富的消息拉取和处理模式
  • 高效的订阅者进行水平扩展
  • 承载上亿级别的消息堆积能力
    在这里插入图片描述
    RockerMQ-2.0集群搭建依靠zookeepe来实现,RocketMQ3.0的时候阿里放弃了zookeeper集群模式,搭建了自己的NameServer.
    RockerMQ是一款高性能、可靠性、分布式事务、支持水平扩展、上亿级别消息堆积、主从切换的消息中间件,但是仅存在于商业版中,免费版是不提供的。
RabbitMQ

AMQP协议:它是应用层协议的一个开放标准,以解决众多消息中间件的需求和拓扑结构问题。它为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。AMQP的主要特征是面向消息、队列、路由、可靠性、安全。AMQP协议更过用在企业系统内,对数据一致性、稳定性、和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
AMQP协议模型
Server:又称Broker,接受客户端的连接,实现AMQP实体服务。
Connetction:连接,应用程序与Broker的网络连接。
Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道,客户端可建立多个Channel,每个Channel代表一个会话任务。
Message:消息,服务器和应用程序之间传送的数据,由Properties和Bodys组成,Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特效,Body则是消息体内容。
Virtual Host:虚拟主机,用于进行逻辑的隔离,最上层 的消息路由。一个VirtualHost里边可以有若干个Exchange和Queue,同一个VirtualHost里边不能有相同名称的Exchange或Queue。
Exchange:交换机,接收消息,根据路由键转发到绑定的队列
Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routingkey
Routingkey:一个路由规则,虚拟机可用它来确认如何路由一个特定消息。
Queue:也成MessgeQueue,消息队列,保存消息并将它们转发给消费者。

Erlang:最初用于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常优秀的。此外,Relang有着和原生Socket一样的延迟
RabbitMQ 是采用Erlang 语言实现AMQP (Advanced Message Queuing Protocol ,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。
在这里插入图片描述
Rabbi tMQ 的具体特点可以概括为以下几点。

  • 可靠性: RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认及发布确认等。
  • 灵活的路由:在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能, RabbitMQ己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。
  • 扩展性:多个Rabbi tMQ 节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。
  • 高可用性:队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队列仍然可用。
  • 多种协议: RabbitMQ 除了原生支持AMQP协议,还支持STOMP ,MQTT 等多种消息中间件协议。
  • 多语言客户端:R甜bitMQ 几乎支持所有常用语言,比如Java、Python、Ruby、PHP 、C# 、JavaScript 等。
  • 管理界面: RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。
  • 插件机制: RabbitMQ提供了许多插件,以实现从多方面进行扩展,当然也可以编写自己的插件。

RabbitMQ的整体架构
rabbitmq整体架构
RabbitMQ的消息流转图
消息流转流程

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值