消息中间件mq

消息中间件mq 系统架构中,消息中间件起到了什么作用?

系统架构中,消息中间件起到了什么作用?

系统架构中,消息中间件起到了什么作用?

现在大型网站架构技术中,有一个高频词就是“消息中间件”,我们在很多大公司分享的技术ppt或者岗位要求里都会看到这个名词。什么是消息中间件呢以及它能解决什么问题呢?

什么是消息中间件?

通过消息中间件可以让不同的系统模块通过传递消息的方式来激活对方的事件以完成相应的操作。消息中间件本质上也算是一种队列,支持同步或异步方式来传输消息。

一般情况下我们把消息中间件简称为mq。

消息中间件在架构中发挥了重要作用

通过消息中间件可以帮我们解决很多问题,比如说:

1、系统解耦

比如一个用户注册流程,可能涉及这些操作:

向用户库中写入数据;

向相关附加表中写入数据;

发送欢迎短信、邮件、站内信等。

在没有使用消息中间件时,这些操作可能都是阻塞式的一步一步进行着,万一某个环节出现异常后续环节可能就无法进行了,这就是典型的高耦合!但当我们引入消息中间件后,用户注册成功后只要生产一条消息,然后由不同的消费者(模块)去消费(执行特定操作),这样系统间的耦合度就低了。

2、异步调用

上面举的会员注册的例子同样适用于此处,同步阻塞式调用会使得调用链时间周期过长,而异步调用极大的缩短了调用链的时间。

3、队列缓冲

消息中间件就像一个蓄水池,可将大量请求存储下来让后台逐一处理,所以像秒杀系统都少不了消息系统。

主流的消息中间件产品

现在市面上有很多消息中间件,应用最为广泛的主要有:rabbitmq、kafka、rocketmq、activemq等。

以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!

系统架构中,消息中间件起到了什么作用?

现在很多系统都引入的消息中间件,我们公司现在也有基于rabbitmq的消息中间件平台,如果项目需要使用的mq的话,只需要申请即可;那么引入消息中间件是为了解决什么问题,我谈谈自己的看法:

异步调用

我们有很多业务系统,实际上实时性要求并没有那么高,完全是可以进行异步调用的。

我曾经做过一个系统是客服通知性质的系统,比如客户十天后需要缴费了,那么我们会根据原始数据 模板,生成短信通知,然后发送给短信平台进行短信发送。这个短信平台提供了一个接口,其他系统如果想要发送短信的话,只要把手机号 短信内容通过接口发送给短信平台,再由短信平台和各个服务商进行对接。这个场景就非常适合改成异步调用,只需要把待发送短信扔到消息队列中,再由短信平台取出待发送短信,进行发送。

再举个例子,如果一个服务有调用链路,比如a->b->c,假如a调b速度很快,但是b调c速度较慢或不稳定,那么可以评估一下c是不是可以做异步调用,这样可以在不影响业务流程的前提下,加快服务的响应速度。

系统解耦

不知道大家有没有遇到过这样的问题,a系统有一些数据,b系统需要这些数据。

一种方法是b系统调用a系统的接口进行查询,但是由于数据的状态可能会发生变化,b系统需要在数据变化的时候做一些业务操作,这时候需要a系统在数据有变化的时候,主动通知b系统;那么可以b系统提供一个接口,a系统主动通知;这样做实现起来没有问题,但是困难也比较大:

通知过程中有问题,比如b系统down掉了、b系统在发布,那么a系统需要考虑重发的问题;

如果数据多、变化快,那么会对b系统带来很大的压力(不停地进行接口调用);

c系统说,我也想要这些数据,我也做个接口你通知一下我吧;

defg系统说...我也想要...a系统开发猝...

那么最好的凯发娱乐官网的解决方案是:a系统将数据发送到mq中,哪些系统需要的话,就去消费(需要被授权);如果哪天某个系统下线了,就取消消费。

流量缓冲

我们之前做过的一个项目,大概功能是这样的。(秒杀系统经常会用到,但是因为这个系统是我们一个实际项目,所以就用这个项目举例了)

a系统对外提供接口,有内网系统调用,也有互联网端的系统调用;互联网端的流量不好估计,如果接口压力过大的话,很有可能把a系统压垮,从而影响到业务流程。于是我们在a系统和互联网端之间,增加了一层,功能也很简单,接收到请求之后,直接扔到mq中,再由一个程序匀速地从mq里面拿请求出来,调用a系统;这样就起到了一个流量缓冲的作用。(并没有让互联网端的系统和a系统改造,他们唯一要做的就是改一下接口地址)。

能想到也就这么多了,欢迎大家补充。

希望我的回答,能够帮助到你!我将持续分享java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。