消息队列,不懂你就Out啦!

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wd2014610/article/details/81504217

为什么要懂消息队列

在程序员的工作和学习中,如果是比较成熟的项目,基本上都会涉及到分布式啊、消息队列啊、高并发啊、高可用啊、高性能啊、缓存啊等各种相对来说比较高级的技术点。
关于消息队列,这个东西是大家一定要懂的,不懂行不行?如果对技术有追求,还是得好好研究下,最好在项目中用到它。

一、什么是消息队列

学习一个东西,一定要先研究百科是怎么解释的。
消息队列的维基百科:消息队列
在计算机科学中,消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。

二、实现

实际上,消息队列常常保存在链表结构中。[2]拥有权限的进程可以向消息队列中写入或读取消息。
目前,有很多消息队列有很多开源的实现,包括JBoss Messaging、JORAM、Apache ActiveMQ、Sun Open Message Queue、RabbitMQ[3]、IBM MQ[4]、Apache Qpid[5]和HTTPSQS。[6]

三、优缺点

消息队列本身是异步的,它允许接收者在消息发送很长时间后再取回消息,这和大多数通信协议是不同的。例如WWW中使用的HTTP协议(HTTP/2之前)是同步的,因为客户端在发出请求后必须等待服务器回应。然而,很多情况下我们需要异步的通信协议。比如,一个进程通知另一个进程发生了一个事件,但不需要等待回应。

但消息队列的异步特点,也造成了一个缺点,就是接收者必须轮询消息队列,才能收到最近的消息。
和信号相比,消息队列能够传递更多的信息。与管道相比,消息队列提供了有格式的数据,这可以减少开发人员的工作量。[2]但消息队列仍然有大小限制。

消息队列除了可以当不同线程或进程间的缓冲外,更可以透过消息队列当前消息数量来侦测接收线程或进程性能是否有问题。

四、如何选择

关于常见的消息队列介绍,在这边有一个博文写的非常好了,感兴趣的同学可以前往学习研究。
消息队列及常见消息队列介绍

因为消息队列主要是由服务器端工程师来主导,后端又以Java程序员的较多,个人比较推荐的是RabbitMQ和RocketMQ。
如果要在这两个中进行继续选择的话,我个人会选择RocketMQ,因为阿里在技术这一块确实做的很优秀,RocketMQ这个阿里云也有商用版的消息队列,你既可以直接用阿里云上的消息队列,也可使用阿里云开源的RocketMQ技术。
所以说,学起来非常好!

五、消息队列的使用场景是怎样的?

在知乎有一些优秀的讨论,感兴趣的同学可以去逛一逛咯。
使用场景
个人认为消息队列的主要特点是异步处理,主要目的是减少请求响应时间和解耦。所以主要的使用场景就是将比较耗时而且不需要即时(同步)返回结果的操作作为消息放入消息队列。同时由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦和。

六、并行执行和顺序依赖之间怎么处理?

这是一个经常会遇到的问题,在这个专栏文档里都有很好的讲解
并行执行和顺序依赖的艺术

好了,今天就谈这么多了,下面进行项目使用!

猜你喜欢

转载自blog.csdn.net/wd2014610/article/details/81504217
今日推荐