Message Queue 消息队列

消息队列概述

消息队列是系统中重要的中间件,主要解决应用耦合,异步消息,高并发等问题。实现高性能,高可用,可伸缩和最终一致性架构。

应用场景

异步处理场景

串行模式

在串行模式中,用户注册成功写入数据库之后,会发站内信,然后发短信通知。串行处理任务完成Respose给用户。


并行模式

在并行模式中,用户注册成之后写入数据库之后,将发站内信、短信的任务写入消息队列中,供其他系统的去读取处理。

业务解耦场景

一般处理

引入消息队列后

在系统间引入MQ可以降低系统的耦合度,提高系统的高可用。

高并发场景

高并发

面对高并发请求,引入MQ,可以控制请求人数,缓解短时间高流量搞垮系统

JMS消息服务

JMS消息模型

P2P模型
P2P模型

每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
接收者在成功接收消息之后需向队列应答成功

Pub/Sub模式
Pub/Sub模式

每个消息可以有多个消费者
发布者和订阅者之间有时间上的依赖性。针对某个主题的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
为了消费消息,订阅者必须保持运行的状态。

常用的MQ

ActiveMQ

⒈ 多种语言和协议编写客户端。
语言: Java,C,C++,C#,Ruby,Perl,Python,PHP。
应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
⒉ 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
⒊ 对Spring的支持
⒋ 通过了常见J2EE服务器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通 过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
⒌ 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
⒍ 支持通过JDBC和journal提供高速的消息持久化
⒎ 从设计上保证了高性能的集群,客户端-服务器,点对点
⒏ 支持Ajax
⒐ 支持与Axis的整合
⒑ 可以很容易得调用内嵌JMS provider,进行测试

RabbitMQ

RabbitMQ结构图

用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

Kafka

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。一般应用在大数据日志处理或对实时性(少量延迟),可靠性(少量丢数据)要求稍低的场景使用。

Kafka结构图
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、 消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能...
    步积阅读 57,450评论 10 138
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,688评论 19 139
  • 1 消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,...
    Bobby0322阅读 11,060评论 0 24
  • 一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,...
    GoGooGooo阅读 2,038评论 1 5
  • 当你在乎了就意味着伤害将要到来了,电影中常常会听到的一句话即“有人的地方,就有江湖。”人与人的交往,就是江湖。...
    只愿静好安然阅读 190评论 0 0

友情链接更多精彩内容