RabbitMQ入门-相关概念介绍

   生产者和消费者
   队列
   交换器、路由键、绑定
   RabbitMQ运转流程
   连接和信道


   生产者和消费者

     生产者:Producer生产者,消息投递方。
     生产者创建消息,然后发布到RabbitMQ。消息一般分为两个部分:消息体和标签。消息体可以称为payload,在实际应用中,消息体一般是一个带有业务逻辑结构的数据,比如一个JSON字符串。可以进一步对这个消息体进行序列化操作,消息的标签用来表述这条消息,比如一个交换器的名称和一个路由键。生产者把消息由RabbitMQ,RabbitMQ会根据标签把消息发送给感兴趣的消费者。
     消费者:Consumer消费者,接受消息的一方。
     消费者连接到RabbitMQ服务器,并订阅到队列上。当消费者消费一条消息时,只是消费消息的消息体(payload)。在消息路由的过程中,消息的标签会丢弃,存入到队列中的消息只有消息体,消费者也只消费消息体。
     Broker:消息中间件服务点。
     对于RabbitMQ来说,一个RabbitMQ Broker可以简单地看作一个RabbitMQ服务节点,或者RabbitMQ服务实例。大多数情况下也可以讲一个RabbitMQ Broker看作一台RabbitMQ服务器。
     生产者将消息存入RabbitMQ Broker,以及消费者从Broker消费数据流程:
                         在这里插入图片描述

  1. 生产者将业务数据进行可能的包装封装成消息,发送到Broker中
  2. 消费者订阅并接受消息,经过可能的解包处理得到原始的数据,之后再进行业务逻辑(业务逻辑不一定需要和接受消息的逻辑使用同一线程,消费者进程可以使用一个线程去接受消息,存入到内存中,比如Java中的BlockingQueue,业务处理逻辑使用另一个线程从内存中读取数据,这样可以进一步解耦,提高整个应用的处理效率)。

   队列
     RabbitMQ内部对象,用于存储消息。RabbitMQ中消息都只存储在队列中,生产者生产消息最终投递到队列中,消费者从队列中获取消息消费。
     多个消费者可以订阅同一个队列,这时队列的消息会被平均分摊(轮询)给多个消费者进行处理,而不是每个消费者都可以收到所有的消息并处理。


   交换器、路由键、绑定

     Exchange:交换器。生产者发送消息流程为:生产者将消息发送到Exchange,由交换器将消息路由到一个或多个队列中。如果路由不到,丢弃或返回给生产者。
                                                  在这里插入图片描述
     RoutingKey:路由键。生产者将消息发送给交换器时,一般会指定一个RoutingKey,用来指定这个消息的路由规则,而这个RoutingKey需要与交换器类型和绑定键(BindingKey)联合使用才能最终生效。
     Binding:绑定。RabbitMQ中通过绑定将交换器和队列关联起来,在绑定的时候一般会指定一个绑定键,这样RabbitMQ就知道如何正确地将消息路由到队列了。
;       ;       ;       ;       在这里插入图片描述
     生产者将消息发送给交换器时,需要一个RoutingKey,当BindingKey和RoutingKey相匹配时,消息会被路由到对应的队列中。在绑定多个队列在同一交换器时,这些绑定允许使用相同的BindingKey,fanout类型交换器会无视BindingKey,而是将消息路由到所有绑定到该交换器的队列中。


   RabbitMQ运转流程

     生产者发送消息:

  1. 生产者连接到RabbitMQ Broker,建立一个连接,开启一个信道(Channel)。
  2. 生产者声明一个交换器,并设置相关属性,交换机类型,是否持久化等。
  3. 生产者声明一个队列并设置相关属性,是否排他,是否持久化等。
  4. 生产者通过路由键将交换器和队列绑定起来。
  5. 生产者发送消息至RabbitMQ Broker,其中包含路由键、交换器等信息。
  6. 相应的交换器根据接收到的路由键查找相匹配的队列。
  7. 如果找到,则将从生产者发送过来的消息存入相应的队列中。
  8. 如果没找到,则根据生产者配置的属性选择丢弃还是会退给生产者。
  9. 关闭信道。
  10. 关闭连接。

     消费者接受消息:

  1. 消费者连接到RabbitMQ Broker,建立一个连接,开启一个信道。
  2. 消费者向RabbitMQ Broker请求消费相应队列中的消息,可能会设置相应的回调函数以及做一些准备工作。
  3. 等待RabbitMQ Broker回应并投递相应队列中的消息,消费者接受消息。
  4. 消费者确认收到消息(ack)。
  5. RabbitMQ 从队列中删除相应以及被确认的消息。
  6. 关闭信道。
  7. 关闭连接。

   连接和信道

     无论是生产者还是消费者,都需要和RabbitMQ Broker建立连接,这个连接就是一条TCP连接,也就是Connection。一旦TCP连接建立起来,客户端紧接着就可以创建一个AMQP信道(Channel),每个信道都会被指派一个唯一的ID,信道是建立在Connection之上的虚拟连接,RabbitMQ处理的每条AMQP指令都是通过信道完成的。
                                        在这里插入图片描述
信道(Channel)的引入:一个应用程序中有多个线程需要从RabbitMQ中消费消息或者生产消息,如果没有Channel,必然会建立多个TCP连接,然而对于操作系统而言,建立和销毁TCP连接是非常昂贵的开销,如果需要高峰,性能瓶颈随之显现,RabbitMQ采用NIO的做法,选择TCP连接复用,不仅可以减少开销,同时也便于管理。
     每个线程把持一个信道,所以信道复用了Connection的TCP连接,同时RabbitMQ可以确保每个线程的私密性,就想拥有独立的连接一样。当每个信道的流量不是很大时,复用单一的Connection可以在产生性能瓶颈的情况下有效地节省TCP连接资源,但当信道本身流量很大时,这时候多个信道复用一个Connection就会产生性能瓶颈,此时就需要开辟多个Connection,将这些信道均摊到这些Connection中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值