消息中间件常见问题汇总

什么是消息中间件?

消息中间件是可以用来进行跨系统通信的一个软件,提供了可靠的异步通信机制。

目前常见的消息中间件有哪些?

目前常见的消息中间件有四种

  • ActiveMQ
    ActiveMQ是Apache开源的一款使用java编写的基于JMS规范的消息中间件,不过目前官方的维护似乎变得特变少了
  • RabbitMQ
    RabbitMQ是一款开源的使用ERLang开发的基于AMQP协议的消息中间件,社区活跃度还不错
  • RocketMQ
    RocketMQ是阿里团队开源的一款使用java编写的消息中间件
  • Kafka
    kafka是LinkedIn公司开发的一款使用scala语言编写的高性能消息中间件

各个消息中间件之间的对比

特点 ActiveMQ RabbitMQ RocketMQ Kafka
社区活跃度 相对较高
性能 单机吞吐量在万级左右 单机吞吐量在万级左右,不过消息延迟特别低,在微秒级别 单机吞吐量可达到10w级别 单机的吞吐量可以达到10w级别
可靠性 可靠性相对来说低一点,有较低的概率丢失数据 可靠性非常高,基本上不会丢失数据 经过配置可以做到0丢失 经过配置可以做到0丢失
可用性 基于主从架构实现高可用 可以部署镜像集群,创建高可用队列保证可用性 分布式架构,可用性很高 也是分布式架构,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用
功能完善情况 由于诞生早,支持的功能非常丰富 功能完善,而且有非常友好的web管理界面,插件支持丰富 功能比较完善,提供命令控制台管理 提供比较简单的MQ功能
主要使用场景 一般小型的公司,或者并发不高的场景都可以使用,不过现在社区活跃度不高了,不建议使用它 适用于中小型企业,以及对消息的可靠性要求高于吞吐量的场景 适用于高并发场景,并且公司实力强,有能力改源码 更多的是适用于日志采集的场景,在大数据,云计算领域使用的相对比较多

你使用过哪些消息中间件?

目前我还仅仅使用到了Rabbitmq

你为什么会选择使用RabbitMQ

基于我的业务场景来说,我选择使用rabbitmq是根据一下几点来考量的:
1、业务场景需要保证消息不能丢失,对可靠性要求比较高,所以我排除了ActiveMQ
2、业务的吞吐量本身并不是特别大,引入消息中间件主要是为了解耦和异步,所以我决定选择RabbitMQ
3、团队中有了解过RabbitMQ的人占多数,而我自身也是比较熟悉RabbitMQ,所以降低了开发的风险

你在使用的过程中都遇到了哪些问题?

在使用的过程中遇到了以下几个问题:
1、数据同步的时候消费者挂掉了
消费者挂掉的原因是因为内存溢出,为什么会内存溢出?
后面发现线停到消费者,然后等待队列里面堆积很多消息之后在启动消费者,发现不一会儿就会出现内存溢出,排查发现是因为没有使用QOS预取,导致了消息一下子全部被拉取到消费者,导致消费者内存溢出。
解决方案:设置QOS的值为300,重新发布消费者,没有出现内存溢出
2、消息丢失了
由于之前消费者挂掉,所有的消息都堆积到了队列里面,队列都已经堆积满了,溢出的消息却无处可去直接被丢弃了
解决方案:增加死信交换器和死信队列,溢出的消息会进入死信队列继续消费,同时也把队列和交换器以及消息做了持久化设置

使用消息中间件给系统带来了哪些弊端

1、系统的整体可用性降低了
由于引入了消息中间件,所以不得不去考虑消息中间件会挂掉的可能性,一旦消息中间件挂掉,那么系统就会不可用。
2、系统变得更复杂了
由于引入了一个消息中间件,从系统整体上来说又多了一个需要整合的模块,从开发上来说需要进行消息中间件代码的编写。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章