消息队列(天书)

定义:消息队列是在消息传输过程中保存消息的容器

消息队列是同步 :调用消息就直接传送过去

消息队列是异步:消息发到盒子里,什么时候用什么时候调。

参考https://www.jianshu.com/p/1582b37291f9了解什么是消息队列

 

MQ的作用

1、解耦:在项目启动之初是很难预测未来会遇到什么困难的,消息中间件在处理过程中插入了一个隐含的,基于数据的接口层,两边都实现这个接口,这样就允许独立的修改或者扩展两边的处理过程,只要两边遵守相同的接口约束即可。

2、冗余(存储):在某些情况下处理数据的过程中会失败,消息中间件允许把数据持久化知道他们完全被处理

3、扩展性:消息中间件解耦了应用的过程,所以提供消息入队和处理的效率是很容易的,只需要增加处理流程就可以了。

4、削峰:在访问量剧增的情况下,但是应用仍然需要发挥作用,但是这样的突发流量并不常见。而使用消息中间件采用队列的形式可以减少突发访问压力,不会因为突发的超时负荷要求而崩溃

5、可恢复性:当系统一部分组件失效时,不会影响到整个系统。消息中间件降低了进程间的耦合性,当一个处理消息的进程挂掉后,加入消息中间件的消息仍然可以在系统恢复后重新处理

6、顺序保证:在大多数场景下,处理数据的顺序也很重要,大部分消息中间件支持一定的顺序性

7、缓冲:消息中间件通过一个缓冲层来帮助任务最高效率的执行

8、异步通信:通过把把消息发送给消息中间件,消息中间件并不立即处理它,后续在慢慢处理。

 

ActiveMQ

1、支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

2、多语言和协议编写客户端:

语言:Java,C,C++,C#,Ruby,Perl,PHP,Python。

应用协议:OpenWire,Stomp,REST,WS-Notification,XMPP,AMQP

3、和Spring完美结合。

4、不需要任何第三方工具:因为AcitveMQ是一个独立的jms provider

5、消息持久化:支持通过JDBC和journal提供高速度消息持久化

6、从设计上保证了高性能的集群,客户端-服务器,点对点

单点:无法满足企业高可用和集群的需求,所以ActiveMQ提供了master-slave,broker cluster等多种部署方式。

集群:Master-Slave的部署方式虽然解决了高可用的问题,但不支持负载均衡。Broker-Cluster解决了负载均衡,但当其中一个Broker突然宕掉的话,那存在于该Broker上出去Pending状态的message会消失,无法达到高可用的目的。一般项目中用到的是Master-Slave和Broker-Cluster相结合的部署方式。

 

RabbitMQ

1、可靠性:RabbitMQ使用一些机制来保证可靠性,如持久化、传输确认及发布确认等。

2、灵活的路由:在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。

3、扩展性:多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。

4、高可用性:队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队仍然可用。

5、多种协议:RabbitMQ除了原生支持AMQP协议,还支持STOMP,MQTT等多种消息中间件协议。

6、多语言客户端:RabbitMQ几乎支持所有常用语言,比如Jav a、Python、Ruby、PHP、C#、JavaScript等。

7、管理界面:RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。

8、插件机制:RabbitMQ提供了许多插件,以实现从多方面进行扩展,当然也可以编写自己的插件。

参考https://blog.csdn.net/weixin_40792878/article/details/82555791了解RabbitMQ

 

Kafka

1、高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

2、可扩展性:kafka集群支持热扩展

3、持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

4、容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

5、高并发:支持数千个客户端同时读写

 参考https://blog.csdn.net/selfsojourner/article/details/79980965https://blog.csdn.net/u012986057/article/details/50580490

 

RocketMQ

RocketMQ是淘宝根据Kafka的特性用Java语言编写的中间件,在阿里集团广泛应用

参考https://blog.csdn.net/zhangll_2008/article/details/78657177

https://yq.aliyun.com/articles/624207?utm_content=m_1000012577了解RocketMQ

 

对比

参考https://www.cnblogs.com/mengchunchen/p/9999774.html对各消息队列进行对比

参考https://blog.csdn.net/paincupid/article/details/79721817RocketMQ与kafka对比(18项差异)-转自阿里中间件 

 

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