rabbitmq(二)-概念介绍

\color{red}{欢迎关注我的微信公众号:进阶者euj}

rabbitmq 概念介绍

上一篇文章rabbitmq(一)-基础入门介绍了如何快速使用rabbitmq,这一篇主要对rabbitmq做一些概念和介绍,和管理后台的使用。

主要涉及的概念有:

  1. broker
  2. product
  3. consumer
  4. queue
  5. exchange
  6. binding
  7. connection
  8. channel
rabbitmq概念图

broker

broker是rabbitmq的实例代表;
一个rabbitmq代表一个broker;
在管理台的页面显示为node:


product

生产者,负责发送消息的client

consumer

消费者,就是接收消息的一方。
消费者连接到 RabbitMQ 服务器,并订阅到队列上。
当消费者消费一条消息时,只是消费消息的消息体( payload )。


queue

队列,用于存储消息;
rabbitmq中消息都只能存储在队列中,这点和 Kafka 这种消息中间件相反
Kafka 将消息存储在 topic (主题)这个逻辑层面,而相对应的队列逻辑只是 topic 实际存储文件中的位移标识。
RabbitMQ 的生产者生产消息井最终技递到队列中,消费者可以从队列中获取消息并消费。

多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊(Round-Robin ,即轮询)给多个消费者进行处理,而不是每个消费者都收到所有的消息井处理。


可以点底部的add queue按钮来新建队列

有关queue的属性介绍在另外的文章。

exchange

交换器;
在rabbitmq中,生产者是先将消息发送到 Exchange;
由交换器将消息路由到一个或者多个队列中。
逻辑图如下:


RabbitMQ 中的交换器有四种类型,不同的类型有着不同的路由策略。

  1. direct交换机
  2. faout交换机
  3. topic交换机
  4. head交换器

在管理页面中exchange的位置如下;


点进去可以看多一些有关exchange的属性



如图显示这是一个direct类型的、持久化的交换机。

有关4种exchange的用法和属性介绍在rabbitmq(三)- 交换机

binding

绑定,RabbitMQ 中通过绑定将交换器与队列关联起来
在绑定的时候一般会指定一绑定键( BindingKey ,这样 RabbitMQ 就知如何何正确地将消息路由到队列了。
一个exchange可以绑定多个queue。
一个queue可以绑定多个exchange。


管理后台页面



最下面的按钮可以自行创建binding

connection

连接
我们知道无论是生产者还是消费者,都需要和 RabbitMQ Broker 建立连接,这个连接就是一条 TCP 连接,也就是Connection。

管理台页面


channel

AMQP 信道( Channel) ,
一旦连接建立起来,客户端紧接着可以创建一个 AMQP 信道( Channel) ,每
个信道都会被指派一个唯一的ID,信道是建立在Connection之上的虚拟连接,rabbitmq处理的每条指令都是通过channel来完成的。

管理台页面


也可以查看consumer在用哪个channel


问题1 为什么要用channel?

答:因为一个connection对应一个tcp连接,
如果每个线程都创建一个connection,也就是许多个 TCP 连接。
然而对于操作系统而言,建立和销毁 TCP 连接是非常昂贵的开销。
RabbitMQ 采用类似 NIO (Non-blocking 110 )的做法,选择 TCP 连接复用,不仅可以减少性能开销,同时也便于管理。

每个线程把持一个信道,所以信道复用了 Connection TCP 连接。
同时 RabbitMQ 可以确保每个线程的私密性,就像拥有独立的连接一样。
当每个信道的流量不是很大时,复用单Connection 可以在产生性能瓶颈的情况下有效地节 TCP 连接资源。
但是当信道本身的流量很大时,这时候多个信道复用一个 Connection 就会产生性能瓶颈,进而使整体的流量被限制了。
此时就需要开辟多个 Connection ,将这些信道均摊到这些 Connection 中,至于这些相关的调优策略需要根据业务自身的实际情况进行调节.

问题2 Connection与channel的区别?

答:Connection 可以用来创建多个 Channel 实例,但是 Channel 实例不能在线程问共享,应用程序应该为每一个线程开辟一个 Channel 。
某些情况下 Channel 的操作可以并发运行,但是在其他情况下会导致在网络上出现错误的通信帧交错,多线程问共享 Channel 实例是非线程安全的。

问题3 一个channel应该对应一个consumer还是多个consumer?

答:最常用的做法是一 Channel 对应一个消费者;
也就是意味着消费者彼此之间没有任何关联。
当然也可以在一个 Channel 中维持多个消费者。
但是要注意一个问题,
如果 Channel 中的 个消费者一直在运行,那么其他消费者的 callback会被“耽搁”。

RabbitMQ 发送消息的运转流程

1、product与broker建立一个connection,然后在connection上面开启一个channel。
2、product声明一个exchange。
3、product声明一个queue。
4、product在exchange与queue建立一个binding。
5、product把消息发送到broker中。
6、broker根据excahnge把消息路由到对用的queue中。
7、关闭channel。
8、关闭connection。

\color{red}{欢迎关注我的微信公众号:进阶者euj}

其他相关文章:
rabbitmq(一)-基础入门
rabbitmq(二)-概念介绍
rabbitmq(三)-交换机

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列...
    小波同学阅读 852评论 1 5
  • 1 为什么是你? RabbitMQ RabbitMQ是一个开源的消息代理和队列服务器,通过普通协议在完全不同的应用...
    JavaEdge阅读 1,069评论 0 4
  •   RabbitMQ是一个开源的消息代理和队列服务器,通过普通协议在各应用之间共享数据。RabbitMq使用Erl...
    青衣敖王侯阅读 701评论 0 1
  • 上一节我们对消息中间件和RabbitMQ本身有了大致印象,本节主要介绍RabbitMQ的模型架构。 相关概念介绍 ...
    凭窗听风阅读 656评论 0 0
  • 什么是消息队列(MQ) 消息是在不同应用间传递的数据。这里的消息可以非常简单,比如只包含字符串,也可以非常复杂,包...
    mghio阅读 363评论 0 0