rabbitmq——架构以及相关概念

  • rabbitmq的整体架构:

在这里插入图片描述

  • producer:生产者
  • consumer:消费者
  • broker:消息中间件的服务节点

对于rabbitmq来说,一个rabbitmq broker可以看做一个rabbitmq服务节点。
在这里插入图片描述

  • queue:队列。是rabbitmq的内部对象,用于存储消息。多个消费者可以均摊消费同一queue.

在这里插入图片描述

  • Exchange:交换器。图2-4中producer到queue之间其实还存在交换器,负责将producer产生的消息路由到一个或者多个队列中。加入路由不到会返回给producer或者直接丢弃。后边章节详细介绍。
  • RoutingKey:路由键。与交换器类型和绑定键(BindingKey)联合使用来指定规则。在交换器和绑定键确定的情况,生产者通过指定RoutingKey来决定消息流向哪里。
    Bingding;绑定。作用是通过绑定键将交换器和队列关联起来。
    在这里插入图片描述
    BindingKey并不是所有的情况下都生效,它依赖于交换器类型。
  • 路由键和绑定键
  • bindingkey:在使用绑定的时候,其中需要的路由键是bindingkey,对应的AMQP命令(下一小计会讲)是exchange.Bind
    、Queue.Bind.
  • routingKey:在发送消息的时候,其中需要的路由键是routingKey.涉及的客户端方法是,channel.basicPublish,对应的AMQP命令是Basic.Publish.
  • 交换器类型
  • fanout 将所用发送到该交换器的消息路由到所有与交换器绑定的队列中。
  • direct 把消息路由到那些bindingkey和routingKey完全匹配的队列中。

在这里插入图片描述
设置路由键为“warnning”可以发布到queue1和queue2中。设置路由键为“info”和“debug”则只能发布到queue2中。

  • topic :与direct 类似,但是不是完全匹配,匹配规则更加灵活。
    Routingkey:是一个“.”加上字符串匹配。
    Bindingkey:和Rountingkey一样,但是可以使用“*”匹配单个字符,“#”匹配多个字符。如图:
    在这里插入图片描述
  • 生产者的执行步骤:
  • 连接到RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)
  • 声明一个交换器,并设置相关属性,比如交换机类型,是否持久化等
  • 声明一个队列并设置相关属性,比如是否排他,是否持久化,是否自动删除
  • 通过路由键将交换器和队列绑定起来
  • 发送消息到RabbitMQ Broker,其中包含路由键,交换器都信息
  • 对应的交换器根据接收到的路由键查找相匹配的队列。
  • 如果找得到,将消息存入相应的队列中。
  • 找不到,根据生产者配置的属性选择丢弃还是回退给生产者
  • 关闭信道
  • 关闭连接
  • 消费者接受信息的过程:
  • 连接到RabbitM Q Broker,建立一个连接,开启一个信道。
  • 请求队列中的消息,可能会设置相应的回调函数,以及一些准备工作
  • 等待RabbitMQ Broker回应并投递相应队列的信息,消费者接收信息
  • 消费者确认(ack)接收到的信息
  • RabbitMQ 从队列中删除相应的已经被确认的信息
  • 关闭信道
  • 关闭连接
    Connection:一条TCP连接.一旦连接建立,客户端 创建一个AMQP信道(Channel),每个信道都会委派一个唯一的ID。信道是Connection之上的虚拟连接,RabbitMQ处理的每天AMQP指令都是通过信道完成的。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39837953/article/details/85926179