银行mq是什么意思(商业银行mq是什么意思)

1.什么是 MQ

MQ(message queue),从英文意思上理解是消息队列的意思,大白话就是用来存放消息的一个中间件。为什么会出现消息中间件呢?因为现在的互联网架构大多数都是采用的微服务架构,消息中间件的出现是为了上下游消息传递问题。上游发送消息只需要依赖MQ,不需要依赖其他服务,下游消费消息只需要监听对应的消费队列即可,这样就做到,不同服务之间的解耦。

2. 为什么要用 MQ

2.1 服务解耦

目前大部分的电商项目都是采用的微服务架构,一个电商项目会被拆分成多个微服务,比如订单服务、库存服务、支付服务、物流服务、会员服务等等。如果说采用的是耦合的调用方式,订单服务调用库存服务然后再调用支付服务,这样一条链路下去,假如中间一个环节挂了,那就这个业务就挂了,没办法往下执行了,这样的话整个项目的可用性就下降了。如果说我们采用消息中间件,把下单信息缓存到消息队列中,库存服务、支付服务监听对应的消息队列进行消费,这样的话,就算订单服务挂了,也不会影响其他服务的业务处理,等待订单服务恢复后,用户再进行下单操作即可。

2.2 流量削峰

举个栗子,假如我们的订单系统可以处理5000个并发请求,如果说是日常的正常时段,处理起来是没有什么问题,一个订单的处理时间1秒左右就可以返回了。但是,如果是双十一秒杀活动,一下子几万个下单请求过来,系统是处理不过来的,那如果不使用消息队列做异步处理的话,那超过5000个请求后就要拒绝客户下单了,这样给客户的体验相当不好。如果我们使用消息队列,可以把1秒钟下的订单缓存到队列中,然后起一个服务去消费队列中的订单消息,处理完业务逻辑再返回处理结果即可,这位就是为什么我们在双十一抢购的时候会出现“下单排队中”的提示。

2.3 异步处理

不同服务之间的异步调用,有这么一种场景:我一位客户需要向银行贷款(服务A),银行需要放款(服务B),假如放款需要处理很长时间,这时候服务A去调服务B,是不知道服务B什么时候会处理完的。这个种场景,以前会有两种方式去处理:1、服务A提供一个回调接口给服务B去调用,服务B执行完之后就会去调用服务A的接口返回执行结果给到服务A;2、服务A轮询去调用服务B的查询放款结果接口(比较好性能)。虽然这两种方式都能解决问题,但是多少都有点不够优雅。

如果使用消息队列,服务A调用服务B申请贷款后,只需要监听一个制定好的队列即可,服务B处理完申请流程后,会往队列中发送一条消息到mq,服务A会及时收到消息并处理消息。

上一篇:基于本地消息表实现MQ最终一致性

下一篇:RabbitMQ消息确认机制