本文介绍: 以常见订单系统为例子,用户点击下单按钮后的业务逻辑包括:扣减库存生成相应的单据、发红包、发短信通知‘在业务发展初期这些逻辑可能放在一起同步执行,随着业务订单量增长,需要提升系统服务性能,这时候可以将一些不需要立即生效操作拆分出来异步执行,,比如发红包、发短信通知等。这种场景可以用MQ,在下单的主流程比如扣减库存生成相应的单据)完成之后发送一条消息到MQ让主流程快速完结,而由另外的单独线程拉取MQ的消息(或者由MQ推送消息),当发现MQ中有发红包或者发短信之类的消息执行相应的业务逻辑。

一、什么是消息队列
消息(Message)是指在应用之间传送的数据,消息可以非常简单比如包含文本字符串,也可以复杂,可能包含嵌入对象
消息队列(Message Queue)是一种应用间的通信方式,消息发送可以立即返回,有消息系统来确保信息可靠专递,消息发布者只管把消息发布到MQ中而不管谁来取,消息使用者只管从MQ中取消息而不管谁发布的,这样发布者和使用者都不用知道对方的存在
二、为何使用消息队列
从上面描述可以看出消息队列是一种应用间的异步协作机制,那什么时候需要使用MQ呢?
常见订单系统为例子,用户点击【下单按钮后的业务逻辑包括:扣减库存、生成相应的单据、发红包、发短信通知‘在业务发展初期这些逻辑可能放在一起同步执行,随着业务订单量增长,需要提升系统服务性能,这时候可以将一些不需要立即生效操作拆分出来异步执行,,比如发红包、发短信通知等。这种场景可以用MQ,在下单的主流程(比如扣减库存、生成相应的单据)完成之后发送一条消息到MQ让主流程快速完结,而由另外的单独线程拉取MQ的消息(或者由MQ推送消息),当发现MQ中有发红包或者发短信之类的消息,执行相应的业务逻辑。
以上是用于业务解耦的情况,其他常见场景包括最终一致性广播、错峰流控等等。
三、RabbitMQ特点
RabbitMQ是一个由Erlang语言开发的AMQP的开源实现
AMQP:Advanced Meassage Queue高级消息队列协议。它是应用协议一个开放标准,为面向消息的中间设计基于协议客户端消息中间件传递消息,并不受产品开发语言等条件限制

RabbitMQ最初起源于金融系统用于分布式系统存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,具体特点:
1、可靠性(Reliablitity
RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认发布确认
2、灵活的路由(Flexible Routing
在消息进入队列之前,通过 Exchange路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange实现针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也通过插件机制实现自己的 Exchange
3、消息集群(Clustering)
多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker
4、高可用(Highly Available Queues
队列可以在集群中的机器上进行镜像,使得在部分节点问题的情况下队列仍然可用。
5、多种协议(Multiprotocol
RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。
6、多语言客户端(Many Clients
RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。
7、管理界面(Management UI)
RabbitMQ 提供了一个易用的用户界面,使得用户可以监控管理消息 Broker 的许多方面。
8、跟踪机制(Tracing)
如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么
9、插件机制(Plugin System
RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己插件

四、消息队列的应用及好处

例如

(1)服务员点菜快,厨师做菜慢,服务员只需要下单给厨师,然后就可以继续去服务顾客,不需要等待厨师把菜做完

菜单就相当于消息,放单子的位置就相当于队列

(2)业务系统需要发短信,但短信发送模块速度跟不上,业务系统就可以把发送短信的相关信息封装一个消息,放入队列,短信发送模块从队列中取消息进行处理

消息队列的好处
(1)提高系统响应速度
使用消息队列,生产者一方,把消息往消息队列里一扔,就可以立马返回应用户,无需等待处理结果
(2)保证消息的传递
如果发送消息时接收者不可用,消息队列会保留消息,直到成功的传递
(3)解耦
只要信息格式不变,即使接收者接口位置、或者配置改变,也不会给发送者带来任何改变
消息发送者无需知道消息接收者是谁,使得系统设计更清晰
为什么需要分布式消息队列
(1)多系统协作需要分布式
例如消息队列的数据需要在多个系统之间共享,所以需要提供分布式通信机制、协同机制
(2)可靠
消息会被持久化到分布式存储中,这样避免了单台机器存储的消息由于机器问题导致消息丢失
(3)可扩展
分布式消息队列,会随着访问量的增加而方便的增加处理服务器
 

原文地址:https://blog.csdn.net/X_islu/article/details/134630456

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_27742.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注