消息中间件详解

概述

消息中间件是基于队列与消息传递技术,在网络环境中为应用系统提供同步或异步、可靠的消息传输的支撑性软件系统。

那 MQ 解决了什么问题?

对于电商app来说,顾客下单后要扣减商品库存,还要更新订单状态等一系列操作。当并发量大的时候,服务器磁盘、IO、CPU load 会很高,因此有的时候需要一个相对较长的时间间隔才能完成上述的一系列操作。如果用户提交完订单,让用户等待几秒才能成功,对于用户来说,会很不耐烦,甚至会流失大量用户。

如果有了 MQ ,可以让系统间的通信变为异步通信,系统A 发个消息到 MQ,系统 B什么时候获取消息进行处理,系统A不用管,系统A向MQ发送完消息只需要给用户及时反馈即可,剩下的操作系统B可能会在未来的几秒、几分钟甚至几小时后才进行处理。


使用场景

  • 跨系统数据传递
  • 高并发流量削峰
  • 数据分发和异步处理
  • 大数据分析与传递
  • 分布式事务

消息中间件

协议

AMQP(Advanced Message Queuing Protocol) 是高级消息队列协议,是一个提供统一消息服务的应用层标准高级消息队列协议,是应用协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

常见的消息中间件协议有:OpenWire、AMQP、MQTT、Kafka、OpenMessage

大部分消息中间件采用的是 AMQP 协议,那为什么不用 http 协议?

  1. http请求报文头和响应报文头比较复杂,包含了 cookie,数据的加密解密、状态码、响应码等附加的功能,但对于一个消息而言,不需要这么复杂,没有这个必要性,它其实就是负责数据传递、存储、分发就可以,追求的是高性能、尽量简洁、快速。
  2. 大部分情况下 http 都是短连接,在实际交互中,一个请求到响应很有可能中断,没进行持久化中断的话,会造成请求丢失。不利于消息中间件的业务场景,消息中间件可能是一个长期的获取消息的过程,出现问题和故障要对数据或消息进行持久化,目的是为了保证消息和数据的高可靠性。

实际上,AMQP是基于以上原因在 TCP/IP 协议基础上设计的协议。

AMQP特性:

  • 分布式事务支持
  • 消息的持久化支持
  • 高性能和高可靠的消息处理优势

消息分发策略机制

ActiveMQRabbitMQKafkaRocketMQ
发布订阅支持支持支持支持
轮询分发支持支持支持/
公平分发/支持支持/
重发支持支持/支持
消息拉取/支持支持支持

实现方式

ActiveMQRabbitMQRocketMQKafka
单机吞吐量万级万级10万级,高吞吐10万级,高吞吐
时效性ms级微秒级,延迟低ms级ms级以内
可用性高,基于主从架构高,基于主从架构非常高,分布式架构非常高,分布式架构
可靠性较低的概率数据丢失基本不丢失经过参数优化配置,可以做到0丢失经过参数优化配置,可以做到0丢失
功能支持功能完备并发能力强,性能好,延迟低功能完善,扩展性好支持简单MQ功能,大数据领域被大规模使用

高可用机制

是指产品在规定的条件和规定的时间内处于可执行规定功能状态的能力。当业务量增加时,请求也过大,一台消息中间件服务器会触及硬件的极限,一台消息服务器已经无法满足业务的需求,所以消息中间件必须支持集群部署,来达到高可用的目的。


集群模式1 - Master - Slave 主从共享部署

生产者将消息写入到 master 节点,slave 节点连接 master 队列共享一个数据区域。一旦 master 挂掉,生产者就无法将消息发送到队列。

集群模式2 - Master - Slave 主从同步部署

生产者将消息写入到 master 节点,master 会同步数据到 slave 形成副本,如果有多个消费者就可以去不同的节点进行消费。但是消息的拷贝和同步会占用很大的带宽和网络资源。


集群模式3 - 多主集群同步部署

生产者将消息写入到master和slave所有节点,消费者也可以从任意节点消费消息。


集群模式4 - 多主集群转发部署

生产者可以向任意节点写入消息,如果向 broker1 中写入消息,broker1 中会存储数据的相关描述和记录存放的位置,也就是元数据信息。broker1 会向其他的 broker 同步元数据信息。消费者也可以从任意节点消费消息,如果从 broker2 中消费消息,broker2 自己没有对应的信息,可以从对应的元数据信息中查询,返回对应的元消息信息。


集群模式5 - Master - Slave 与 Breoker - Cluster 组合

实现多主多从的热备机制保证消息的高可用。

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
MSMQ是微软的消息队列技术,它是一种企业服务的消息中间件技术,常与企业服务总线一起使用,是企业分布式开发的一部分。使用MQ作为消息中间件可以实现消息的发送和传递之间的解耦,适用于需要分布式架构的系统。 在MQ中,消息队列可以分为静态和动态两种类型。静态消息队列与网络相关联,分为公共队列和专用队列,公共队列是整个网络中所有站点都可以公开访问的,而专用队列只能由知道队列完整路径名或标签的应用程序访问。动态消息队列根据消息接收的操作不同,分为管理队列和响应队列,管理队列包含了整个消息线路中已经发送和接收的消息,而响应队列则用于目标程序接收和回应消息。 MQ的行为方面可以分为队列通信和消息处理两个大的方面。队列通信分为同步和异步两种类型,同步消息是指发送方在执行其他任务之前必须等待接收方的响应,而异步消息则不需要等待接收方的回应就可以继续其他操作。在消息队列交互方面,还有数据完整性、数据一致性、稳定性等类型的考虑,包括消息的优先级、脱机能力、事务性和安全性等。 使用MSMQ,开发者可以通过MessageQueue类对消息队列进行操作。在操作消息之前,需要创建一个存储消息的队列,并为MessageQueue指定消息队列的路径。主要使用的方法和属性包括队列管理和消息管理两类方法,其中队列管理方法用于创建和删除队列,消息管理方法分为同步和异步两种类型,根据实际需求确定使用的类型。主要使用的属性包括Path和Label,Path指定消息队列的地址,Label用于设置或获取队列的描述信息。 总之,MSMQ是微软的消息队列技术,可以实现消息的发送和传递之间的解耦,适用于企业分布式开发。它包括静态和动态消息队列,支持同步和异步消息通信,同时考虑数据完整性、数据一致性和稳定性等因素。开发者可以使用MessageQueue类对消息队列进行管理和操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MSMQ消息队列 用法](https://blog.csdn.net/baihuomeng2210/article/details/101087984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值