Message Queue 消息队列

消息队列概述

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

应用场景

异步处理场景

Message Queue 消息队列_第1张图片
串行模式

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


Message Queue 消息队列_第2张图片
并行模式

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

业务解耦场景

Message Queue 消息队列_第3张图片
一般处理

Message Queue 消息队列_第4张图片
引入消息队列后

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

高并发场景

Message Queue 消息队列_第5张图片
高并发

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

JMS消息服务

JMS消息模型

P2P模型
Message Queue 消息队列_第6张图片
P2P模型

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

Pub/Sub模式
Message Queue 消息队列_第7张图片
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

Message Queue 消息队列_第8张图片
RabbitMQ结构图

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

Kafka

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

Message Queue 消息队列_第9张图片
Kafka结构图

你可能感兴趣的:(Message Queue 消息队列)