rabbit基本概念及消息运转机制步骤

生产者/消费者

生产者负责生产,发送消息
消费者服务消息接收及处理

生产这发送消息到消息队列,消费者从消息队列获取消息进行处理. 实际上, 生产者发送消息是发送小exchang交换机,
exchange交换机, 根据的路由键, 将消息投递到对应的消息消息队列,消费者最后从queue获取消息处理, 因此需要将消息交换机exchange
与消息队列进行绑定,这个成为路由键(有点类似网络,拥有路由交换功能,网络包才能知道下一个投递的位置), 在rabbitmq中拥有一个
默认的交换机default

概念:
1.producer 生产这生产消息,投递到rabbitmq, 消息拥有两部分,消息体即使消息本身, 消息标签(由rabbitmq进行维护)
2. consumer 消费者,接收消息,处理的是消息体(paylod), 而消息标签则会丢弃
3. broker: 消息中间件的服务节点, 一般一个rabbitmq broker可以看成是一个rabbitmq的服务节点, 或者是服务实例

消息流转的大致流程:
在这里插入图片描述

交换器 exchange:
生产者发送消息实际上是发送到交换机exchange, 由交换机将消息通过路邮件发送到一个或者多个绑定的队列中, 如果路由不到,者消息会返回
给生产者,或者直接丢弃 producer --》 exchange --》 queue

routingkey 路邮件, 用来指定消息的路由规则, 这个routintg key 需要交换机与绑定键值生效

binding 绑定, 将交换机与队列关联起来, 绑定的时候指定绑定键

生产者发送消息,指定routingkey 路由键与绑定键匹配的世行,则将消息投递到对应的消息队列中

在dirct交换器类型, routingkey 与bindingkey完全匹配才会投递消息。当然在其他交换机类型中也存在着模糊匹配,规则匹配

队列:
rabbitmq消息值存储在队列中

交换器类型:
fanout(广播)
把所有发送到该交换机的消息路由到所有与该交换机绑定的队列中, 相当于交换机广播

direct(一对一)
消息投递到bindingkey与routingkey完全匹配的队列中

topic(模糊匹配, 规则匹配)
将消息投递到bindingkey与routingkey符合匹配规则的队列中

特殊字符: * 用于匹配一个档次, # 匹配多个单词(也可以是0个)
单词,以分隔符. 号分割,为一个单词, 例如com.test.client test为一个单词

headers
不依赖路由键规则路由消息,而是发送消息内容中的headers属性进行匹配, 性能偏差,很少使用

rabbitmq消息步骤

消费者发送消息的过程:

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

消费者接收消息的过程:

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

论是生产
者还是消费者,都需要和RabbitMQ Broker 建立连接,这个连接就是一条TCP 连接,也就是Connection 。一旦TCP 连接建立起来,客户端紧接着可以创建一个AMQP 信道(Channel) ,每
个信道都会被指派一个唯一的D 。信道是建立在Connection 之上的虚拟连接, RabbitMQ 处理的每条AMQP 指令都是通过信道完成的

对于操作系统而言,建立和销毁TCP 连接是非常昂贵的开销,如果遇到使用高峰,容易出现性能瓶颈,iops上不去。RabbitMQ 采用类似NIO’ (Non-blocking 1/0) 的做法,选择TCP 连接复用,可以减少性能开销
信道就是利用TCP连接进行复用,减小开销, 当然如果单个tcp连接出现瓶颈,可以建立多个tcp连接池进行多路复用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值