消息队列(MQ--rabbitMQ)

一、什么是消息队列

        MQ全称:Message Queue, 消息队列是应用程序和应用程序之间的通信方法,它的数据结构就是队列,并且符合队列的特性,先进先出。既然如此,我们为什么不直接使用队列呢。我认为有以下几点原因:1.它对队列进行增强,方便我们使用,减少了代码量,我们如果自己用队列,得考虑很多东西,比如数据丢失,数据存储等等,2.我们的应用程序,也就是Java程序都是运行在JVM中的,JVM本身就是一个应用程序,它在运行时就设置了一定的内存资源,而是用中间件就减少这部分资源的使用,降低OOM的风险。3.解耦,在微服务开发中,一般会部署多个实例,如果使用队列,每一个实例都会创建一个数据自己的,不能共享,也就造成幂等性,使用消息中间件可以解决大部分的问题。

二、RabbitMQ工作原理

        

一个消费者监听一个队列

  • Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue。
  • Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。
  • Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。
  • Producer:消息生产者,即生产方客户端,生产方客户端将消息发送到MQ。
  • Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。

消息发布接受流程:

        发送消息(producer):首先生产者和Broker建立TCP连接,生产者和broker建立管道,生产者通过管道将消息发送给Broker,由Exchange将消息进行转发到指定的Queue(队列)。

        接受消息(consumer):消费者和Broker建立TCP连接,消费者和broker建立通道,监听指定的queue(队列),当有消息到达Queue时Broker默认将消息推送给消费者,消费者接受到消息。

        

三、工作模式

        1.简单队列模式

        

        一个生产者对应一个消费者。

 

        2.工作队列模式:

        一个生产者对应多个消费者,多个消费者消费共同消费同一个队列的消息,

        一个消息被多个消费者中的一个消费,且只消费一次。默认轮询分发的方式。

        

       

        3.发布/订阅模式:

        和工作队列模式相比,多增加了一个交换机,

        交换机Exchange有以下三种常见类型:

                Fanout:广播 ,将消息交给所有绑定到交换机的队列

                Direct:定向,把消息交给符合指定routing key 的队列

                Topic:通配符,把消息交给符合routing pattern(路由模式)的队列

             

         

        4.Routing路由模式

        

         消息的发送方在向Exchange发送消息时,也必须指定消息的Routingkey。

        Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routing Key与消息Routing Key完全一致才会接收到消息。

        也就是交换机通过路由规则将消息分发到绑定的队列中。

        5.Topic模式

        

        使用通配符方式的Routingkey进行路由。

        

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值