概述消息队列(MessageQueue)是分布式系统中的一个重要组件,是进程间或同一进程的不同线程之间的一种通信方式.与http同步协议不同,消息队列是一种异步通信协议,不需要立竿见影的结果。消息队列异步处理流程控制使用场景应用解耦应用程序解耦消息队列的一个功能就是实现系统应用之间的解耦。以电子商务系统中的订单系统为例。创建订单时:发起支付扣除库存并发消息通知用户更新统计,或者需要增加功能,每次都需要不断调整订单系统和下游系统。引入消息队列后,订单服务在创建订单时向消息队列主题Order发送消息,所有下游都订阅该主题Order,这样无论下游系统如何增减或功能如何下游系统发生变化,订单服务无需做Changed,实现订单服务与下游服务的解耦。异步处理异步处理就是把很多串行的步骤转化为异步处理。以订单系统为例。要下订单,您需要创建订单并锁定库存。数据都在消息队列中,由消息队列异步处理。这样五步就缩减为两步,假设每一步的处理时间需要500ms,不考虑网络延迟:串行处理:500*5=2500ms并行处理:500*2=1000ms系统响应时间缩短半数以上。这样响应速度更快,将请求放在后续操作中,可以充分利用更多的资源来处理请求。所以我们可以看到,实现异步操作的服务:返回结果更快,减少等待时间,提高整体系统性能。秒杀请求飙升至每秒3000个请求,多出来的请求可能会直接导致系统崩溃。因此,我们需要使用消息队列来控制流量。当系统在短时间内收到大量请求时,会先把请求堆在消息队列上,后端服务从消息队列中消费数据。缓冲一次。优点和缺点上面的概述总结了三个优点:异步、削峰和去耦。缺点是:系统可用性降低,系统复杂度增加,可能出现数据一致性问题,如数据丢失、数据重复传输等。RabbitMQ消息队列的五种工作模式。rabbitmq官网教程中介绍了几种工作模式,简单(simple)模式做某事的最简单的事情从上图看,简单模式有以下特点:只有一个生产者,一个消费者,一个队列当生产者和消费者发送和接收消息,他们只需要指定队列名称,而不用发送那个Exchange开关。工作(Work)模式将任务分发给多个消费者(竞争消费者模式)创建一个工作队列,并添加多个消费者共同消费工作队列上的任务。每条消息由一个消费者消费。在发布/订阅模式下,每条消息只能被一个消费者消费。在发布-订阅模式下,每条消息同时被多个消费者消费。上图中的X代表Exchange开关,Exchange类型有:Direct、Topic、Headers和Fanout。扇出用于发布和订阅。Fanout不需要指定具体的队列名称。Exchange会将消息转发到所有绑定的队列。指定指定的目标队列。根据RoutingKey指定规则,指定消费者通过BindingKey绑定自己接收消息队列。只有RoutingKey和BindingKey匹配队列才能接收消息。RoutingKey是生产者指定Exchange路由到的队列。Topic)模式主题模式根据通配符绑定队列,其中*可以代替任务的一个标识符,#可以代替多个标识符,通配符和名字之间用.隔开。topic模式的Exchange类型是topic。每个消息都可以被多个队列使用。参考为什么需要消息队列?消息队列介绍及常用消息队列如果觉得文章对您有帮助,请点个赞!
