RabbitMq基础概念术语详解

本文以Q&A的方式对RabbitMq使用时的基本情况进行说明。

为了保持概念一致性,RabbitMq相关术语仍使用英文。


  • connection是什么,与TCP连接有什么关系?
  • connection代表着一条真实的TCP连接,即物理连接,具有ip和port
  • 该连接与RabbitMq服务器相连,大部分场景下设计时采用长连接
  • 可以配置心跳来检测连接状态
  • connection是线程安全的
  • 创建connection的代价相对较高(其实也不高),且当connection较多时,RabbitMq服务的负荷会变高
  • 使用完毕需要关闭
  • channel是什么,为什么需要使用它?
  • 可以把它看作是虚拟的连接,这里的虚拟是相对于connection的真实连接而言
  • 该虚拟连接处于一个connection的内部,可以把它看作是connection上的session
  • 在channel内进行真实的数据传输,所有的RabbitMq指令都是在channel内进行的
  • 之所以使用channel,是因为创建真实的TCP连接开销较大,且真实连接太多时会增大RabbitMq服务的负荷
  • channel不是线程安全的,一般每个线程维护自己的channel
  • channel设计时就是短暂的,一旦该channel上出现错误,就会关闭,后续操作也不会成功
  • 使用完毕需要关闭
  • channel和connection之间到底是什么关系?
  • 在应用中,先创建connection,然后在该connection上创建channel,在channel上传输数据
  • 可以在一个connection内创建多个channel,协议支持最大值为65535,推荐默认值为2047
  • 其它内容可以参考对channel的解释
  • Exchange是什么?它是如何工作的?
  • 生产者发送的消息全部都发到Exchange,而非直接到queue
  • 负责从生产者接收消息,然后通过路由规则把消息路由到相应的queue
  • 可以使用默认的Exchange,这里生产者和消费者共享一个同名的queue来传递消息
  • 创建Exchange时指定名称和类型,类型通常是:dircet, topic, header, fanout,类型决定了路由规则
  • 生产者把消息publish到指定的Exchange,并指定routing_key,路由规则根据routing_key进行路由
  • 消费者创建一个queue,并使用routing_key把queue绑定到Exchange,以接收从Exchange路由到该queue的消息
  • 各种类型的Exchange的具体说明请参考 RabbitMq入门简介
  • queue是什么?
  • 存放消息的队列,消息的传递必须进入到某个queue,且消息在queue中被消费
  • 消费者创建queue,并把queue绑定到Exchange,依据绑定的routing_key接收消息
  • 可以创建匿名的queue,由RabbitMq随机命名,使用完毕自动删除,queue命名时最长255字节(utf-8字符)
  • 可以在创建queue时,设置消息持久化,这样RabbitMq重启后,queue依然存在
  • Exclusive 属性决定了该queue只能被一个connection使用,且该connection关闭后自动删除queue
  • bind是什么?为什么要bind?
  • 生产者发布的消息都通过Exchange路由,不会直接发送给消费者
  • 消费者要想取得消息,必须把queue绑定到Exchange,这样Exchange才知道需要把消息路由到这个queue
  • 绑定时需要指定Exchange、queue和routing_key
  • bind是一种把queue和Exchange连接起来的方式
  • 总体数据流是怎样的?

如图所示:

在这里插入图片描述

  1. 生产者发布消息到Exchange
  2. Exchange接收消息并负责路由消息
  3. 必须有queue已经binding到了Exchange,示例中Exchange根据路由规则把消息路由到两个queue(由Exchange的类型和routing_key决定)
  4. 消息会驻留在queue中,直到被消费者处理
  5. 最终消息被消费者

参考资料


RabbitMQ Exchanges, routing keys and bindings
Understanding The Relationship Between RabbitMQ Exchanges, Queues and Bindings

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值