专栏首页HUC思梦的java专栏常见的消息中间件有哪些?你们是怎么进行技术选型的?

常见的消息中间件有哪些?你们是怎么进行技术选型的?

要想真正将MQ运用于项目中,要从哪一步开始呢?

我们来想一下,要在项目中使用一个新技术,是不是应该先了解市面上都有哪些常用的框架,所以应该从技术调研开始,选择合适的框架应用于我们的项目。

那都有哪些中间件可供选择呢。其实现在主流的消息中间件就4种:kafka、ActiveMQ、RocketMQ、RabbitMQ

下面我们来看一下,他们之间有什么区别,他们分别应该用于什么场景

ActiveMQ

我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件,都是使用的这个MQ,但是现在用的确实不多了,说白了就是有些过时了。我们去它的官网看一看,你会发现官网已经不活跃了,好久才会更新一次。

它的单机吞吐量是万级,一些小的项目已经够用了,但对于高并发的互联网项目完全不够看。

在高可用上,使用的主从架构的实现。

在消息可靠性上,有较低的概率会丢失数据。

综合以上,其实这个产品基本可以弃用掉了,我们完全可以使用RabbitMQ来代替它。

RabbitMQ

rabbitMQ出现后,国内大部分公司都从activeMQ切换到了rabbitMQ,基本代替了activeMQ的位置。它的社区还是很活跃的。

它的单机吞吐量也是万级,对于需要支持特别高的并发的情况,它是无法担当重任的。

在高可用上,它使用的是镜像集群模式,可以保证高可用。

在消息可靠性上,它是可以保证数据不丢失的,这也是它的一大优点。

同时它也支持一些消息中间件的高级功能,如:消息重试、死信队列等(后续文章会讲到)。

但是,它的开发语言是erlang,国内很少有人精通erlang,所以导致无法阅读源码。

对于大多数中小型公司,不需要面对技术上挑战的情况,使用它还是比较合适的。而对于一些BAT大型互联网公司,显然它就不合适了。

RocketMQ

接下来我们来讨论一下我比较喜欢的MQ-RocketMQ,它是阿里开源的消息中间件,久经沙场,非常靠谱。

它支持高吞吐量,能达到10万级,能承受互联网项目高并发的挑战。

在高可用上,它使用的是分布式架构,可以搭建大规模集群,性能很高。

在消息可靠性上,通过配置,可以保证数据的绝对不丢失

同时它支持大量的高级功能,如:延迟消息、事务消息、消息回溯、死信队列等等(后续文章会单独讲解)。

它非常适合应用于java系统架构中,因为它使用java语言开发的,我们可以去阅读源码了解更深的底层原理。

目前来看,它没有什么特别的缺点,可以支持高并发下的技术挑战,可以基于它实现分布式事务,大型互联网公司和中小型公司都可以选择使用它来作为消息中间件使用,如果我来做技术选型,我首选的中间件就是它。

Kafka

kafka的吞吐量被公认为中间件中的翘楚,单机可以支持十几万的并发,相当强悍。

在高可用上同样支持分布式集群部署。

在消息可靠性上,如果保证异步的性能,可能会出现消息丢失的情况,因为它保存消息时是先存到磁盘缓冲区的,如果机器出现故障,缓冲区的数据是可能丢失的(后续文章会讲到)。

它的功能非常的单一,就是消息的接收与发送,因此不适合应用于许多场景。

它在行业内主要应用于大数据领域,使用它进行用户行为日志的采集和计算,来实现比如“猜你喜欢”的功能。

所以,如果没有大数据的需求,一般不会选择它。

好了,本文对消息中间件的技术选型就到这里,欢迎持续关注文章的后续内容。

往期文章推荐:

什么是消息中间件?主要作用是什么?

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JSTL

    JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

    HUC思梦
  • JAVA调用Oracle存储过程和函数

    HUC思梦
  • @Target:注解的作用目标

    @Target(ElementType.TYPE)——接口、类、枚举、注解 @Target(ElementType.FIELD)——字段、枚举的常量 @Targ...

    HUC思梦
  • Go 语言并发编程系列(一)—— 多进程、多线程与协程的引入

    在原生 PHP 中并没有并发的概念,所有的操作都是串行执行的、同步阻塞的,这也是很多人诟病 PHP 性能的原因,但是不支持并发编程的好处也是显而易见的:保证了 ...

    学院君
  • 八个愚笨的数据迷思:如果你相信了,会被解雇

    大数据,小数据,任何数据 过去几个月我花了不少时间和一些高层营销人员交流,他们来自三个洲,有的相当成功,也有的不太得意。我发现后者通常有两个通病: 有些从事数...

    小莹莹
  • 八个愚笨的数据迷思:如果你相信了,会被解雇

    大数据、小数据、任何数据 过去几个月我花了不少时间和一些高层营销人员交流,他们来自三个洲,有的相当成功,也有的不太得意。我发现后者通常有两个通病: 有些从事数...

    小莹莹
  • 这位创造GitHub冠军项目的“老男人”,堪称10倍程序员本尊

    7月12日一款叫做TDengine的时序数据库项目在GitHub上开源了,这个项目一经发布就稳稳占据了GitHub排行榜的C位,目前TdEngine已经累积了5...

    AI科技大本营
  • 一种高效且通用的数据分析思维

    很多旁友在刚接触数据分析的时候,缺乏数据思维的支持,做起分析来感觉找不准方向,很难通过分析挖掘出数据的价值。因此,我今天给刚入行的新人们分享一种通用的数据分析思...

    朱小五
  • 不要插件!轻松整合WordPress与CDN加速服务

    FHYC
  • 用三维Demo看懂各种优化算法,还有C++程序员福音

    机器学习里的优化算法很多,比如SGD、Adam、AdaGrad、AdaDelta等等,光是它们的迭代公式就已经够让人头疼。

    量子位

扫码关注云+社区

领取腾讯云代金券