开yun官网入口登录APP下载 各个消息中间件的对比

消息队列的作用

1、解耦:多个应用通过消息队列处理同一消息,避免因调用接口故障导致整个进程失败;

2.异步处理:多个应用程序处理消息队列中的同一消息,消息在应用程序之间并发处理,与串行处理相比减少了处理时间;

3、流量剃须:广泛应用于限时抢购或抢购活动中,避免因流量过大导致应用系统卡顿的情况;

消息驱动系统

系统分为消息队列、消息生产者和消息消费者,生产者负责生成消息,消费者(可能有几个)负责处理消息。

常见消息队列

目前,RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,以及一些数据库,如Redis、Mysql、phxsql等,也可以实现消息队列。

兔子MQ

基于AMQP(Advanced Message Queuing Protocol):RabbitMQ AMQP(Advanced Message Queuing Protocol)——知乎

RabbitMQ 于 2007 年发布,是一个基于 AMQP(高级消息队列协议)的可复用企业消息系统,AMQP 是最主流的消息中间件之一。

主要特点:

可靠性:有多种技术可用于在性能和可靠性之间进行权衡。这些技术包括持久性机制、交付确认、发布者证明和高可用性机制;

灵活路由:消息在到达队列之前通过交换机进行路由。RabbitMQ 为典型的路由逻辑提供了多种内置开关类型。如果你有更复杂的路由需求,你可以使用这些开关的组合,你甚至可以实现自己的开关类型,并将其作为 RabbitMQ 的插件使用;

消息集群:可以将同一局域网中的多个 RabbitMQ 服务器聚合在一起,作为独立的逻辑代理使用。

队列高可用:即使存在硬件问题,也可以将队列镜像到集群中的机器上,保证消息安全。

多协议支持:支持多种消息队列协议;

服务器端是用Erlang语言编写的,它支持你能想到的所有编程语言;

管理界面:RabbitMQ 具有易于使用的用户界面云开·全站APP登录入口,允许用户监控和管理消息代理的许多方面;

追踪机制:如果消息异常,RabbitMQ提供了消息追踪机制,让用户可以找出发生了什么。

插件机制:提供了许多插件,从多个方面进行扩展,您也可以自己编写插件;

要使用 RabbitMQ,您需要:

ErLang 语言包和 RabbitMQ 安装包

RabbitMQ 可以在 Erlang 语言支持的平台上运行:Solaris、BSD、Linux、MacOSX、TRU64、Windows NT/2000/XP/Vista/Windows 7/Windows 8、Windows Server 2003/2008/2012 等

Windows 95、98、VxWorks

优点:

由于 Erlang 语言的特性,MQ 性能好,并发性高;

健壮、稳定、易用、跨平台、支持多种语言、文档完整;

有消息确认机制和持久化机制,可靠性高;

高度可定制的路由;

管理接口丰富,在互联网企业中也有大规模应用;

社区活动活跃度高;

缺点:

虽然结合了Erlang语言的并发优势,性能不错,但不利于二次开发和维护。

实现了代理架构,这意味着消息可以在发送到客户端之前在中心节点上排队。此功能使 RabbitMQ 易于使用和部署,但使其速度变慢,因为中心节点会增加延迟,并且封装后消息会更大。

您需要学习复杂的接口和协议,并且学习和维护成本很高。

RabbitMQ 不能很好地支持消息堆叠,当消息积压大量时,可能会导致 RabbitMQ 的性能急剧下降。

RabbitMQ 在这些消息队列中性能最差,每秒处理数万到数十万条消息。如果您的应用程序对消息队列的性能要求非常高,请不要选择 RabbitMQ。

Erlang 是 RabbitMQ 使用的编程语言,其扩展和重新开发成本很高。

ActiveMQ的

ActiveMQ 是一个 JMS 提供程序实现,完全支持 JMS 1.1 和 J2EE 1.4 规范。它速度快,支持多种语言客户端和协议,易于嵌入到企业应用程序中,并具有许多高级功能。

主要特点:

遵守JMS规范:JMS规范提供了良好的标准和保障,包括:同步或异步消息分发、一次性和一次性消息分发、消息接收和订阅等。遵守 JMS 规范的好处是,无论使用哪个 JMS 实现提供程序kaiyun官方网app下载app,这些基本功能都可用;

连接性:ActiveMQ 提供广泛的连接选项,支持以下协议:HTTP/S、IP 组播、SSL、STOMP、TCP、UDP、XMPP 等。对多种协议的支持为 ActiveMQ 提供了很大的灵活性。

支持多种协议:OpenWire、STOMP、REST、XMPP、AMQP;

持久化插件和安全插件:ActiveMQ 提供了多种持久化选项。此外,ActiveMQ的安全性还可以根据用户需求进行定制,进行身份验证和授权。

支持的客户端语言:除Java外,还有:C/C++、.NET、Perl、PHP、Python、Ruby;

Broker 集群:多个 ActiveMQ Broker 可以组成一个集群提供服务;

管理极其简单:ActiveMQ 在设计时充分考虑了开发人员的需求。因此,它不需要专门的管理员,因为它提供了简单易用的管理功能。有许多方法可以监视 ActiveMQ 不同级别的数据,包括在 JConsole 或 ActiveMQ Web 控制台中使用 JMX、处理 JMX 警报消息、使用命令行脚本,甚至监视各种类型的日志。

要使用 ActiveMQ,您需要:

Java JDK、ActiveMQ 包和 ActiveMQ 可以在 Java 语言支持的平台上运行。

优点:

跨平台(JAVA编写与平台无关,ActiveMQ几乎可以在任何JVM上运行)。

您可以使用 JDBC:您可以将数据持久化到数据库中。尽管使用 JDBC 会降低 ActiveMQ 的性能,但数据库一直是开发人员最熟悉的存储介质。将消息保存到数据库,看和摸。而且,公司有专门的DBA对数据库进行优化,主从分离;

JMS支持:JMS统一接口支持;

支持自动重连;

安全机制:支持shiro、jaas等多种安全配置机制,可以对队列和主题进行认证和授权。

完整的监控:具有完整的监控,包括Web控制台、JMX、Shell命令行、Jolokia的REST API;

人性化的界面:提供的Web控制台可以满足大部分情况,可以使用的第三方组件很多,比如hawtio;

缺点:

社区活跃度不如RabbitMQ高;

根据其他用户的反馈,会出现莫名其妙的问题,消息会丢失;

目前重点放在activemq 6.0产品——Apollo上kaiyun官方网app下载app,对5.x的维护较少

不适用于千列的应用场景;

RocketMQ的

RocketMQ来自阿里巴巴的开源产品,是用Java语言实现的,在设计上参考了Kafka,并做了一些改进,消息的可靠性比Kafka更好。RocketMQ在阿里巴巴集团中广泛应用于订单、交易、充值、流计算、消息推送、日志流、binglog分发等场景。

RocketMQ 是阿里巴巴 2012 年的开源消息队列产品,用 Java 语言实现,在设计上参考了 Kafka,并做了一些自己的改进,后来捐赠给了 Apache 软件基金会,2017 年正式毕业,成为 Apache 的顶级项目。RocketMQ广泛应用于订单、交易、存款、流计算、消息推送、日志流、Binglog分发等场景。在双11上经过多次测试,性能、稳定性、可靠性值得信赖。

RocketMQ 具有良好的性能、稳定性和可靠性,几乎具备了现代消息队列所期望的所有功能和特性,并且还在不断增长。

RocketMQ 有一个非常活跃的中文社区,大多数问题都可以用中文回答。RocketMQ 是用 Java 语言开发的,源代码相对容易阅读,便于扩展或重新开发 RocketMQ。

RocketMQ 针对在线服务的响应时延做了大量的优化,大多数情况下都能实现毫秒级的响应。

RocketMQ 的性能比 RabbitMQ 高出一个数量级,每秒处理数十万条消息。

RocketMQ 的缺点是它没有很好地与周围的生态系统集成和兼容。

主要特点:

它是一种基于队列模型的消息中间件,具有高性能、高可靠性、高实时性、分布式等特点。

生产者、消费者和队列都可以进行分布式分配。

如果消费者消费广播,则消费者实例消费该主题对应的所有队列,如果消费者消费集群,则多个消费实例消费该主题对应的队列集合。

能够保证严格的消息顺序;

提供丰富的消息拉取模式;

关键词:

客户评论

我要评论