消息:Message(数据)
消息中间件:MQ(消息队列) Message queue。
队列特征:先进先出
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,进行插入操作的端称为队尾,进行删除操作的端称为队头。
实现先进先出(FIFO)的数据结构。
应用:
1.流量削峰
用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。
2.异步处理
比如用户注册账号,用户点击注册,会将用户信息写入数据库,而且会发送短信、邮箱进行验证或者激活等操作。其中短信、邮箱操作就可以进行异步处理。用户注册后,将数据放入消息队列,短信、邮箱服务会去消息队列获取所需数据,然后分别进行自己的业务。
3.应用解耦
以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。下订单的整个业务需要调用这四个系统。库存、物流、支付为子系统。
用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。只有子系统全部调用正常,才能正确下订单。(如此一来很麻烦,系统间耦合度高)
当转变成基于消息队列的方式后,系统间调用的问题会减少很多。用户创建订单后,将子系统所需信息放入消息队列。子系统分别从队列中获取数据,进行自己的业务处理。
如果物流系统因为发生故障,需要几分钟来修复。但是并不影响下订单操作,等到修复后,再从消息队列中获取数据,进行自己的业务。提高了系统的可用性。