1.简介

RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue protocol)的开源实现。AMQP高级消息队列,说白了就是一个开源的消息中间件。它能解决不同组件、模块、系统间消息通信。

2.系统架构

RabbitMQ Server: 也叫broker server,存储消息的地方

Producer:数据的发送方

Consumer:数据的接收方

Connection: 就是一个TCP的连接。Producer和Consumer都是通过TCP连接到RabbitMQ Server的。以后我们可以看到,程序的起始处就是建立这个TCP连接。

Channels: 虚拟连接。它建立在上述的TCP连接中。数据流动都是在Channel中进行的。也就是说,一般情况是程序起始建立TCP连接,第二步就是建立这个Channel。

那么,为什么使用Channel,而不是直接使用TCP连接?

对于OS来说,建立和关闭TCP连接是有代价的,频繁的建立关闭TCP连接对于系统的性能有很大的影响,而且TCP的连接数也有限制,这也限制了系统处理高并发的能力。但是,在TCP连接中建立Channel是没有上述代价的。对于Producer或者Consumer来说,可以并发的使用多个Channel进行Publish或者Receive。

3、图解

    1. 信息生产者将消息(message)发送到exchange

  2. exchange接受消息之后,负责将其路由到具体的队列中

  3. Bindings负责连接exchange和队列(queue)

  4. 消息到达队列(queue),然后等待被消息接收端处理

  5. 消息接收端处理消息

Exchanges有三种类型:direct, fanout,topic。 每个实现了不同的路由算法(routing algorithm)。

Direct exchange: 如果 routing key 匹配, 那么Message就会被传递到相应的queue中。其实在queue创建时,它会自动的以queue的名字作为routing key来绑定那个exchange。

Fanout exchange: 会向响应的queue广播。

Topic exchange: 对key进行模式匹配,比如ab*可以传递到所有ab*的queue。

Consumer和Procuder都可以通过 queue.declare 创建queue。如果queue已经存在,也不会报错。如果没有,要么发送不了消息,要么取不到消息,所以还是都创建吧。

Bindings就是将通过Exchange将queue和routing keys绑定。

rabbitmq系列(一)-基本概念理解相关推荐

  1. RabbitMQ系列教程之四:路由(Routing)

    在上一个教程中,我们构建了一个简单的日志系统,我们能够向许多消息接受者广播发送日志消息. 在本教程中,我们将为其添加一项功能 ,这个功能是我们将只订阅消息的一个子集成为可能. 例如,我们可以只将关键的 ...

  2. RabbitMQ系列教程之二:工作队列(Work Queues)

    今天开始RabbitMQ教程的第二讲,废话不多说,直接进入话题.   (使用.NET 客户端 进行事例演示) 在第一个教程中,我们编写了一个从命名队列中发送和接收消息的程序.在本教程中,我们将创建一个 ...

  3. 《计算机网络思想》系列(1)网络体系结构———理解,总结,辨析,升华

    ***前言*** 从这篇文章起,我的每一篇博文都会列出一些基本属性元素,目的是为了方便读者更好的归纳知识,方便地把文章中有用的信息纳入自己的知识体系里,并且提供信息让读者判断,自己的知识水平是适合阅读 ...

  4. C/C++中宏概念理解

    C/C++中宏概念理解 C/C++中宏概念理解 宏替换是C/C++系列语言的技术特色,C/C++语言提供了强大的宏替换功能,源代码在进入编译器之前,要先经过一个称为"预处理器"的模 ...

  5. Kafka系列之:深入理解Kafka 主题、分区、副本、LEO、ISR、HW、Kafka的主写主读和分区leader选举

    Kafka系列之:深入理解Kafka 主题.分区.副本.LEO.ISR.HW.Kafka的主写主读和分区leader选举 一.Kafka重要知识点提炼 二.详细介绍Kafka 主题.分区.副本.LEO ...

  6. 我的Blog文章索引::机器学习方法系列,深度学习方法系列,三十分钟理解系列等

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.机器学习技术感兴趣的同学加入.纯技术交流. 以下是我利用业余 ...

  7. FPGA||ZYNQ概念理解之: Cortex-A9 处理器及架构

    源起 Zynq系列的亮点在于FPGA里包含了完整的ARM处理子系统(PS),每一颗Zynq系列的处理器都包含了Cortex-A9处理器,整个处理器的搭建都以处理器为重心,而且处理器子系统中继承了内存控 ...

  8. 【外行也能看懂的RabbitMQ系列(二)】—— RabbitMQ的Web管理界面(rabbitmq_management)详解(内含Topic模式通配符实操)

    系列文章目录 准备篇 RabbitMQ安装文档 第一章 RabbitMQ快速入门篇 第二章 RabbitMQ的Web管理界面详解 第三章 RabbitMQ进阶篇之死信队列 第四章 RabbitMQ进阶 ...

  9. 【见闻录系列】我所理解的“业务”

    [见闻录系列]我所理解的"业务" FesianXu 20220530 at Baidu Search Team 前言 我们经常会谈到"业务"一词,作为在互联网圈 ...

  10. RabbitMQ系列笔记介绍篇

    导语 rabbitMQ是市面上应用很广的一种应用间传送数据的通信方式,是由erlang语言开发,主要特点就是异步通信,实现服务与服务之间的解耦. 特点 可靠性:提供了持久化.传输时确认.发布时确认.跟 ...

最新文章

  1. 102页PPT,DeepMind强化学习最新进展,含图文、公式和代码
  2. js中的true,false盲点
  3. SQL Server 跨库同步数据
  4. 如何才能招募更多合伙人?合伙人裂变的核心是什么?
  5. 《Lua游戏AI开发指南》一第2章 创建并移动智能体
  6. 关于matlab快速下载
  7. 2021智能仓储物流之最全AGV企业供应商名录整理分享~
  8. STM32—TIMx输出PWM信号驱动MG996R舵机
  9. 万能网页视频下载教程
  10. sql bigint 转varchar_SQL 优化案例一则
  11. 5G的遮羞布被撕下了,双十一最畅销的手机竟然是4G手机
  12. Android地图开发之OpenStreetMap基础教程
  13. Java线程的死锁和活锁
  14. 【算法图解】第七章:7.5(狄克斯特拉算法优化版)
  15. JSP内置对象Session——setAttribute/getAttibute/removeAttribute
  16. 7.3 习而学与CDIO,来自工程教育思想的启示——《逆袭大学》连载
  17. js 色卡 (javascript 色卡 hsv 色卡 hsb 色卡)
  18. 关于 git rebase 的踩坑记录
  19. 【AI视野·今日CV 计算机视觉论文速览 第230期】Fri, 2 Jul 2021
  20. 20210330论文笔记--3篇注意力机制算法

热门文章

  1. eureka集群的两种配置方式:配置文件方式与DNS方式
  2. SFTP服务的使用!!
  3. 链接地址中的target=”_blank”属性安全性处理
  4. Linux解压bz2文件的方法
  5. ACM题目————STL练习之众数问题
  6. 吴昊品游戏核心算法 Round 17 —— M*N PUZZLE 与 N PUZZLE 的解的唯一性定理(由特殊到一般)...
  7. 新窝开张,自己祝贺一下。
  8. x264 编码数配置
  9. py-faster-rcnn +cudnn V5
  10. 执行quartz报错java.lang.NoClassDefFoundError: javax/transaction/UserTransaction