四种入门级消息中间件
四种入门级消息中间件
ActiveMQ(性能一般)
ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线,并且它一个完全支持JMS规范的消息中间件。 其丰富的API、多种集群构建模式使得他成为业界老牌消息中间件,在中小型企业中应用广泛! MQ衡量指标:服务性能(一般,如果对并发要求不是特别大,可以考虑使用)、数据存储、集群架构 特点:
1、支持多种语言编写客户端
2、对spring的支持,很容易和spring整合
3、支持多种传输协议:TCP,SSL,NIO,UDP等
4、支持AJAX 消息形式:
1、点对点(queue)
2、一对多(topic)
Kafka(高性能)
Kafka是Linkedln开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来> 处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息> 的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。 kafka使用page cache进行文件存储,进而实现高性能读写。关注性能,可靠性关注不高
RockerMQ(收费)
RocketMQ是阿里开源的消息中间件,目前也已经孵化为Apache顶级项目,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景
维护是一个痛点,需要专门的团队
特点
可以保证消息顺序性
提供丰富的消息拉取和推送的模式
高效的水平扩展
多种架构模式可供选择:双Master,Msater-Slave,2m2s,多主多从
同步双写,异步复制,存储方式,零拷贝
分布式事务,主从自动切换
RabbitMQ
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队 列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可> 靠性要求很高的场景,对性能和吞吐量的要求还在其次。
RabbitMQ与AMQP协议(Advanced Message Queuing Protocol高级消息队列协议)
RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使> > 用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。 Erlang语言最初在于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常优秀的 Erlang的优点:Erlang有着和原生Socket一样的延迟
可靠性消息投递模式(confirm),返回模式(return)
与SpringAMQP完美的整合、API丰富
集群模式丰富,表达式配置,HA模式,镜像队列模型
保证数据不丢失的前提做到高可靠性、可用性
Erlang语言最初在于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常优秀的 Erlang的优点:Erlang有着和原生Socket一样的延迟
AMQP定义:是具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协 议的一个开放标准,为面向消息的中间件设计。
核心概念
Server:又称Broker,接受客户端的连接,实现AMQP实体服务 Connection:连接,应用程序与Broker的网络连接 Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务。 Message:消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则就是消息体内容。 Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有若干个Exchange和Queue,同一个VirtualHost 里面不能有相同名称的Exchange或Queue Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列
Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key
Routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息
Queue:也称为Message Queue,消息队列,保存消息并将它们转发给消费者