消息队列中间件使用日记(面试硬核资料)

使用过很多消息队列中间件,今天没事就来总结一下,先从中间件的用途说起吧。

1.消息队列有哪些作用?

(1)解耦(应用之间不再直接相互访问,而是直接与消息对列对接)
(2)异步(分解一个费时的操作,把它变成多个异步执行的步骤)
(3)削峰(让处理程序相对均衡地处理数据)
这些相信大家在网上一查一大把,这里我用实际项目案例来说一下就更具体了,大家在面试时可以这样说说,保证面试官另眼相看,好了,不吹上干货。
上面的一个稍大型的项目中,就用到了三种消息中间件,每个中间件都能起到上述三个作用,比喻:
(1)上面的EMQ用来收集所有物联网硬件的状态数据,而上面的推送服务和kafka从EMQ订阅和消费消息,如果没有EMQ做解耦,那么推送服务和kafka就需要直接与硬件对接,而硬件非常多,最终形成一个网状态拓朴,复杂度自然指数增长,所以这里是一个典型解耦的应用场景;
(2)再来看一下异步,同样是刚才的案例,如果没有EMQ这个采集服务,那么硬件发送状态数据和对这些数据的处理就变得成同步过程,即硬件发送数据时还要等待对方将收到的数据处理完才能再次接收并处理,有了中间件,这个过程中是异步的了,硬件发送状态数据和推送服务处理这些数据都直接与EMQ中间件对接,完全不用知道对方的存在;
(3)削峰填谷,这个可以看上方的kafka,它就相当如一个大容量的缓存池,当有大量数据过程时,如果直接让spark或flink来处理,很可能会被压垮,但有了这个缓冲区,不管有多少数据过来,都是先保存在缓冲区,spark/flink可以按自己的处理能力来消费这些数据。
当然还有一些网上的资料说日志处理也算是消息队列的一种用途,个人觉得这个属于实际应用的场景,如真要说还有哪些用途,个人觉得部分消息中间件(如rocketmq、rabbitmq)还能很好地解决世界性难题--分布式事务,用消息事务的方式来实现最终一致性分布式事务。
另外消息对列还可以结合stomp、websocket用于消息推送负载均衡用途。

2.有哪些消息队列中间件?各自应用场景是什么?

消息中间件很多很多,随便就能罗列一大把,如ActiveMQ,RabbitMQ,ZeroMQ,Kafka,RocketMQ,EMQ等,各自有哪些优势和劣势呢?个人观点:

(1)物联网:推荐EMQ,支持MQTT协议,号称百万级;

(2)大数据:kafka,大数据王者,吞量大;

(3)常规开发,或一般情况下,强烈推荐RabbitMQ,虽然在性能上不是最优的,但开源热度高,相关生态完整,支持AMQP协议,通过插件还支持MQTT、JMS、STOMP协议,对分布式事务还有支持,支持死信队列、可靠消息发送...,还有很多,这里不一一列举了。

其实与rabbitmq同样重量级的还有rocketmq,这个是阿里开源的,可以很好的支持分布式事务,性能也非常优异,但目前开源热度较低,而且国内对开源这块不是非常执着,可能不多久因为商业原因,也闭源了。

3.有哪重要的协议?JMS、AMQP、MQTT、STOMP?

(1)什么是JMS?

中件间如此之多,各个厂商的接口都不一致,早在2001年就有了JMS协议,它明确了访问消息中件间的API接口规范,当然只是针对JAVA语言。

(2)什么是AMQP?

毕竟JMS只是规范了API且只对JAVA编程语言,这进新的问题来了,如果生产端、消费商使用了不同的语言开发,这下就麻烦了,不能在异构的环境中跑起来,为了解决这一问题,如是就有了AMQP协议,这是一个与具体消息中间件无关、语言无关的二进制协议,它重点在于消息传递的格式定义,当然光讲这个协议就要写几篇博客了,我们先大概理解一下就好了。下方是本人画的协议模型图:

(3)什么是STOMP?

简单(流)文本定向消息协议,它提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。

(4)什么是MQTT?

物联网兴起了,也需要消息中件间,但是呢,物联网有物联网的特征,就像为什么物联网不能用5G或4G技术呢,而要用NB-IoT技术一样,物联网要求电池要耐用,信号覆盖要强(如地下室),网络环境差,但是对带宽的要求不高,因为硬件设备往往几分钟才会传递几个字节的状态信息,这时就出现了MQTT协议,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。当然了就要在性能或特性上做一些让步,它内存占用低、不支持安全连接、消息不透明、不支持事务、不允许分段消息、不支持长周期存储和转发等特性。

4分布式事务

RabbitMQ实现流程

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RocChenKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值