一、为什么需要消息队列服务?
在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如大量的insert,update之类的请求同时达到mysql,直接导致无数的行锁表锁,甚至最后请求堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。
二、选择MQ时主要关注的特性
1) 通信模式(是否满足业务场景):
ActiveMQ: queue(producer/consumer), topic(publisher/subscriber)
RabbitMQ: AMQP协议支持路由选择和广播
ZeroMQ: 支持REQ、PUSH、PULL等模式
2) 支持的接口语言:
RabbitMQ、ZeroMQ、ActiveMQ均支持常用的多种语言客户端 C++、Java、.Net,、Python、 Php、 Ruby等。
3) 消息持久化:
ActiveMQ 和 RabbitMQ都支持
4) 服务器主备搭建,客户端自动failover支持:
ActiveMQ(非常容易) > RabbitMQ > ZeroMQ
5) 性能
6) 监控、配置
方便监控、配置
三、各类MQ比较
ActiveMQ
Apache ActiveMQ居于两者(RabbitMQ & ZeroMQ)之间,类似于ZeroMQ,它可以部署于代理模式和P2P模式。
ActiveMQ被誉为Java世界的中坚力量。
类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。
RabbitMQ
RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多协议:AMQP,XMPP,SMTP,STOMP,也正是如此,使它变得非常重量级,更适合企业级的开发。RabbitMQ是AMQP协议领先的一个实现,它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队。
对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。此特性使得RabbitMQ易于使用和部署,适宜很多场景如路由、负载均衡或消息持久化等,用消息队列只需要几行代码就可以搞定。但是,这使得它的扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。
RabbitMQ需要在目标主机上安装Erlang环境。
ZeroMQ
ZeroMQ号称最快的消息队列系统,尤其针对大吞吐量的需求场景。是一个非常轻量级的消息系统,专门为高吞吐量/低延迟的场景开发,在金融界的应用中经常可以发现它。与RabbitMQ相比,ZeroMQ支持许多高级消息场景,但是你必须实现ZeroMQ框架中的各个模块(比如Socket或者Device等)。
ZeroMQ能实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合各种技术框架,技术上的复杂度是对这个MQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或者中间件,因为你的应用程序将扮演这个服务角色。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。
但是,ZeroMQ仅提供非持久性的队列,也就是down机,数据将会丢失。
Kafka/Jafka
Kafka(能将消息分散到不同的节点上)是LinkedIn于2010年12月开发并开源的一个分布式MQ系统,现在是Apache的一个孵化项目,是一个高性能跨语言分布式Publish/Subscribe消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。
Kafka具有以下特性:
快速持久化,可以在O(1)的系统开销下进行消息持久化;
高吞吐,在一台普通的服务器上既可以达到10w/s的吞吐速率;
完全分布式,Broker,Producer,Consumer都原生自动支持分布式,自动实现负载均衡;
支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。
Redis
Redis是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所有完全可以当做一个轻量级的队列服务来使用。
四、参考
http://blog.ftofficer.com/2010/03/translation-rabbitmq-python-rabbits-and-warrens/ 兔子和兔子窝
相关推荐
五、常见消息中间件对比 1. RabbitMQ:基于AMQP协议,支持多种语言,适合小型项目和开发测试。 2. Apache Kafka:专为大规模数据流设计,适合实时数据处理和日志收集。 3. RocketMQ:阿里巴巴开源,适用于大规模...
七、其他消息中间件对比 除了ActiveMQ,还有RabbitMQ、Kafka、RocketMQ等知名消息中间件,它们各有特点,如RabbitMQ基于AMQP协议,适合微服务架构;Kafka则在大数据实时处理领域表现出色。 总结,Java消息中间件,...
8. **对比分析**:与其他知名的消息中间件产品,如RabbitMQ、Apache Kafka、ActiveMQ等进行对比,分析各自的特点和适用场景。 9. **未来趋势**:可能还会探讨消息中间件的未来发展趋势,如云原生、微服务架构下的...
### 消息中间件对比分析 #### Kafka与Activemq、Rabbitmq、ZeroMq、Rocketmq的比较 在现代分布式系统中,消息中间件(Message Queue, MQ)扮演着至关重要的角色,它们用于在分布式组件之间传输消息,帮助解决网络...
3. **技术选型**:对比分析各种消息中间件的优缺点,如RabbitMQ的AMQP协议、Kafka的高吞吐量特性、ActiveMQ的易用性等,帮助读者选择适合的中间件。 4. **实战教程**:提供从安装、配置到实际编程的步骤,可能包括...
### TIBCO Rendezvous (TIBCO RV) 与 IBM MQ 及 JMS 消息中间件的对比分析 #### TIBCO Rendezvous 技术简介 TIBCO Rendezvous(简称TIBCO RV)是一款强大的中间件产品,它通过一系列专有的技术,实现了异构系统...
本文将对比三种经典的消息中间件:MQ(IBM出品)、JMS(Java消息服务)和TIBCO Rendezvous(TIBCO RV),探讨它们在功能、架构、消息传输方式等方面的差异。 首先,**消息中间件的基本功能**包括: 1. **异步通信**...
### Java消息服务的消息中间件的研究与设计 #### 一、引言 随着分布式计算环境的日益普及和技术的进步,异构系统间的通信问题逐渐成为关注焦点。消息中间件作为一种解决这一问题的有效手段,其重要性日益凸显。...
国产化中间件行业深度分析 中间件概念: 中间件是连接底层基础软件与上层应用服务的枢纽,目的在于效率提升,面向的使用对象是上层应用开发者。狭义的中间件就是应用服务器软件,广义的中间件包括打包各类企业 IT ...
本文将从 RabbitMQ 面试题及答案中生成相关知识点,涵盖了消息队列的概念、优点、应用场景、缺点、常见的消息中间件对比等内容。 消息队列的概念 消息队列(Message Queue,简称 MQ)是一种软件和软件之间进行通信...
### 消息中间件在分布式系统中的作用介绍 #### 消息中间件的定义与功能 消息中间件(Message-oriented Middleware, MOM)是一种基础软件设施,专注于在分布式系统之间发送和接收消息。它通过提供高效可靠的消息...
"消息中间件activemq项目demo" 这个标题表明这是一个关于ActiveMQ消息中间件的实践示例项目,主要关注其在实际应用中的操作和配置。"项目demo"通常指的是一个简化版的应用,用于演示或教学目的,帮助用户了解如何在...
消息队列是一种应用系统之间进行异步通信的中间件,它的核心功能是实现不同应用之间的信息传递,它在软件工程中常用于解耦服务、提高系统伸缩性以及保证消息传递的可靠性和顺序性。在当今分布式系统架构中,消息队列...
### 2024年Java面试题:消息中间件RabbitMQ面试题解析 #### 一、消息队列(MQ)的基本概念与...理解其核心概念、优缺点以及与其他消息中间件的对比,不仅有助于面试准备,也能为实际工作中选择合适的技术栈提供参考。
为了更好地理解如何选择合适的分布式消息中间件来实现削峰填谷及应用间解耦,下面简要对比了几种常用的消息中间件: - **RocketMQ**:提供非常高的性能和吞吐量,特别适合大规模的消息传输和处理场景,支持分布式...
本文将对比分析三个经典的消息中间件:MQ(IBM出品)、JMS(JAVA消息服务)和TIBCO Rendezvous(RV)。 首先,这三种中间件都提供了基本的消息处理功能,如异步消息传递、发布订阅模型、消息持久化以及网络传输优化...
本文将对比分析三个经典的消息中间件:MQ(IBM出品)、JMS(Java Message Service)以及TIBCO Rendezvous(简称RV)。 1. **消息中间件基本功能** - **异步通信**:所有这三种中间件都能实现消息的异步发送和接收...
消息中间件在分布式系统中扮演着至关重要的角色,它允许应用程序之间通过发送和接收消息进行通信,而不是直接调用彼此,从而实现解耦、异步处理和可扩展性。ActiveMQ 支持多种消息协议,包括JMS(Java Message ...
#### 消息中间件对比 - **ActiveMQ**: 成熟的产品,支持多种协议,但单机吞吐量较低。 - **RabbitMQ**: 性能良好,社区活跃度高,适用于数据量较小的场景。 - **RocketMQ**: 适用于金融等高可靠性要求的领域,经历过...