消息队列中间件使用日记(面试硬核资料)
使用过很多消息队列中间件,今天没事就来总结一下,先从中间件的用途说起吧。
1.消息队列有哪些作用?
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实现流程
5相关资料
****:https://edu.****.net/course/detail/28154
淘宝教育:http://i.xue.taobao.com/detail.htm?courseId=120643
网易云课堂:https://study.163.com/course/introduction/1209781826.htm?share=2&shareId=480000001920801