RabbitMQ结构

RabbitMQ组件

RabbitMQ几大组件

生产者:创建消息,并将消息发送到消息中间件,不关心消费者当前的状态。
消费者:连接消息中间件,订阅在队列之上,进行消息的消费。不会关心消息的生产者是谁,以及生产者现在的状态。
消息:有效载荷+标签。
broker:消息中间件的服务节点。
队列:RabbitMQ中唯一存放消息的位置,以队列的形式存储。
交换器:作为一个邮递员的角色,负责将发送到交换器上的消息根据交换器的类型与路由键匹配情况,进行消息的路由。
绑定键:交换器与队列绑定关系的关键字。
路由键:将消息发送到交换器后,交换器根据路由键与绑定键的匹配关系进行消息的路由。
消息从生产者到Broker,最后由消费者消费过程:
在这里插入图片描述

交换器的几种类型

fanout:它会把所有发送到该交换器的消息,路由到所有与该交换器绑定的队列中;
direct:把消息路由到那些BindingKey和RoutingKey完全匹配的队列中;
topic:类似于direct,但可以使用通配符匹配规则;
header:消息不根据路由键的匹配规则路由,而是根据发送的消息内容中的headers属性进行匹配。

运行流程与AMQP协议分析

生产者发送消息流程

  1. 生产者与Broker建立连接(Connection),开启信道(Channel)
  2. 生产者声明交换器(交换器类型、是否持久化、是否自动删除等)
  3. 生产者声明队列(是否持久化、是否排他、是否自动删除)
  4. 生产者通过路由键将交换器和队列绑定
  5. 生产者发送消息至Broker(携带路由键等)
  6. 交换器根据接收到的路由键,以及交换器类型查找匹配的队列
  7. 找到,队列将消息存入相应队列中
  8. 找不到,则根据生产者的配置,选择丢弃还是回退给生产者
  9. 关闭信道
  10. 关闭连接

在这里插入图片描述

消费者接收消息流程

  1. 消费者与Broker建立连接(Connection),开启信道(Channel)
  2. 消费者向Broker请求消费相应队列的消息,可能设置回调函数
  3. 等待Broker回应并投递相应队列中的消息,接收消息
  4. 消费者确认(ack)接收到的消息
  5. RabbitMQ从队列中删除相应已经被确认的消息
  6. 关闭信道
  7. 关闭连接

在这里插入图片描述

AMQP协议相关指令表

在这里插入图片描述

为什么使用channel?

Connection连接消耗昂贵的TCP资源,channel是AMQP协议建立在Connection连接之上的,每一个channel都有一个ID。TCP连接资源宝贵,有数量限制,channel无限制。
通常一个应用程序会监听多个队列,每一个监听都是一个消费者,如果使用Connection连接作为消费者,则将消耗大量的TCP连接,使用channel方式使得一个应用程序只需要一个TCP连接即可。

在MQ中间件中,影响性能的主要因素:
1、序列化
    序列化方式有很多种(JDK序列化、JSON、XML、MessagePack等),RabbitMQ将序列化操作交给客户端自己。
2、通信协议
    RabbitMQ的AMQP协议定义了通信规则,同时复用了TCP连接
3、消息发送方式
    RabbitMQ一次发送一条消息,Kafka一次发送一批消息
4、消息存放方式
    RabbitMQ支持内存与磁盘两种形式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值