初识消息队列

什么是消息队列(Message queue)?

    “Message queue”是在消息的传输过程中保存消息的容器,是分布式系统中重要的组件。
    简单的使用描述:当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。
    当前使用较多的消息队列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等,而部分数据库如Redis、Mysql以及phxsql也可实现消息队列的功能。

使用消息队列有什么好处?

    1.提高系统响应速度

        使用消息队列,生产者一放,把消息往队列里一扔,就可以立马返回,响应了用户,无需等待处理结果。

        例如:医院体检取化验单,可以让生产者订阅,结果下来了,直接知道结果一出来,无需通知。

      2.提高系统稳定性

         两个系统间紧密结合,如果有一个系统由于某些原因停止,会造成以一个系统也暂时无法使用。
         例如:电商平台,电商系统发送数据给生产系统的情况,生产系统如果由于某些原因停止服务,不使用消息队列,电商系统发送不出去,用户无法进行下单操作,但是如果使用消息队列,消息队列收到消息后,会在生产系统重新服务后,停止服务这段时间的用户下的订单,还是可以通过消息队列传输给生产系统。

消息队列使用场景

       一、异步处理

           多应用对消息队列中同一消息进行处理,应用间并发处理消息,相比串行处理,减少处理时间;
           场景说明:新用户注册后,需要发注册邮件和验证短信。
           传统的做法
           1.串行的方式
            用户注册完成后,先发送注册邮件,在发送验证短信,等验证短信发送完成后才会将信息返回给客户端。

            
              2.并行方式
               用户注册完成后,注册右键及短信并行处理,等邮件和短信都处理完成后,才会将信息返回给客户端。
                
                上面的两个方式,假设每个处理时间均为50ms,
                串行需要时间:50+50+50=150ms
                并行需要时间:50+50=100ms

                       可以看出的并行所需时间要比串行的速度提高了50ms       

               使用消息队列的做法:
               使用消息队列后,我们将对发送消息及发送验证短信异步处理。
                
                用户注册完成后,将消息传到消息队列后,会立即将信息返回给客户端。

            二、应用解耦

            多应用间通过消息队列对同一消息进行处理,避免调用接口失败导致整个过程失败;
    
               场景说明:电商平台,电商系统发送数据给生产系统的情况。用户下单后订单系统去通知生产系统。
            传统的做法
           订单系统直接调用生产系统
            
            如果生产系统服务停掉了,会导致用户无法进行下单操作。
             使用消息队列的做法:
            
            用户下单后,订单消息写入了消息队列,生产系统会通过订阅的模式获取订单信息。即使生产系统服务停止了,期间的用户下的订单还是存在消息队列中,等生产系统服务恢复后,生产系统从消息队列中获取停止服务期间的订单信息,这样也实现了订单系统与生产系统之间的应用解耦。

      

              三、流量销锋

               应用场景: 秒杀活动,一般会因为瞬间访问量过大,导致流量暴增,相关系统无法处理请求或服务崩溃。加入消息队列后,系统可以在消息队列中获取数据,秒杀时,后入队列的用户无法秒杀到商品,这些请求直接抛弃,返回用户秒杀商品已秒杀完毕等信息,这样做了一次缓冲,极大地减少了相关系统的压力。
                
  消息队列的两种模式
        一、点对点模式(queue)
        一个先进先出的消息存储区域。消息按照顺序发送接收,一旦消息被消费处理,该消息将从队列中删除。
        参与的角色:
        1.消息发送者(生产者):发送消息到消息队列。
        2.消息接收者(消费者):从消息队列接收消息。
        3.消息队列
        流程:
        一个生产者向一个特定的队列(queue)发送消息,一个消费者从该队列中接收消息并消费消息。消息被消费后,这个消息队列不再存储,所以消费者不能消费到已经消费的消息。其中,消息的生产者和消费者可以不同时处于运行状态。
        


        二、发布/订阅模式(Topic)      
        一种支持消息多个订阅者的机制。
        参与的角色:
        1.发布者(Publisher):发布主题
        2.订阅者(Subscriber):订阅主题
        3.主题(Topic)
        流程:
        发布者发布一个特定的主题,并且向这个特定的主题发布消息,订阅者订阅该主题后接收该主题发送过来的消息。这种模式下发布者和订阅者彼此不知道对方,这种模式被概括为:0个/多个消费者可以获得消息在发布者和订阅者之间存在时间依赖性,即必须先订阅,再发送消息,而后接收订阅的消息,这个操作顺序必须保证。

            

         


            


                
               



                    









猜你喜欢

转载自blog.csdn.net/qq_36014509/article/details/81000547