MQ的扩展
1 JMS消息服务器ActiveMQ
http://activemq.apache.org/
说明:ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支
持JMS1.1和J2EE 1.4规范的。
主要特点:
a、多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python,PHP;
b、应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP;
c、完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务);
d、对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持
Spring2.0的特性;
e、通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中
通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容
J2EE 1.4商业服务器上;
f、支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA;
g、支持通过JDBC和journal提供高速的消息持久化;
h、从设计上保证了高性能的集群,客户端-服务器,点对点;
i、支持Ajax;
j、支持与Axis的整合;
k、可以很容易得调用内嵌JMS provider,进行测试。
2 分布式消息中间件Metamorphosis
说明:Metamorphosis (MetaQ) 是一个高性能、高可用、可扩展的分布式消息中间件,类似于
LinkedIn的Kafka,具有消息存储顺序写、吞吐量大和支持本地和XA事务等特性,适用于大吞
吐量、顺序消息、广播和日志数据传输等场景,在淘宝和支付宝有着广泛的应用,现已开源。
主要特点:
a、生产者、服务器和消费者都可分布;
b、消息存储顺序写;
c、性能极高,吞吐量大;
d、支持消息顺序;
e、支持本地和XA事务;
f、客户端pull,随机读,利用sendfile系统调用,zero-copy ,批量拉数据;
g、支持消费端事务;
h、支持消息广播模式;
i、支持异步发送消息;
k、支持http协议;
l、支持消息重试和recover;
m、数据迁移、扩容对用户透明;
n、消费状态保存在客户端;
o、支持同步和异步复制两种HA;
p、支持group commit。
3 分布式消息中间件RocketMQ
http://rocketmq.apache.org/
RocketMQ 是一款分布式、队列模型的消息中间件,具有以下特点:
a、能够保证严格的消息顺序;
b、提供丰富的消息拉取模式;
c、高效的订阅者水平扩展能力;
d、实时的消息订阅机制;
e、亿级消息堆积能力;
f、Metaq3.0 版本改名,产品名称改为RocketMQ。
4 其他MQ
a、.NET消息中间件 DotNetMQ;
b、基于HBase的消息队列 HQueue;
c、Go 的 MQ 框架 KiteQ;
d、AMQP消息服务器 RabbitMQ;
e、MemcacheQ 是一个基于 MemcacheDB 的消息队列服务器。
5为什么需要消息队列
说明:消息系统的核心作用有三点:解耦、异步和并行。
5.1用户注册案例
5.1.1用户注册的一般流程
问题:随着后端流程越来越多,每步流程都需要额外的耗费很多时间,从而导致用户更长的等待延迟
5.1.2用户注册的并行执行
问题:系统并行的发起了四个请求,四个请求中,如果某一个环节执行一分钟,其他环节再快,用户
也需要等待一分钟。如果其中某个环节异常之后,整个服务会挂掉。
5.1.3用户注册的最终一致
说明:1、保证主流程的正常执行、执行成功之后发生MQ消息出去;
2、需要这个destination的其他系统通过消费数据再执行,最终一致。