当前位置: 首页 > news >正文

【RabbitMQ实战】04 RabbitMQ的基本概念:Exchange,Queue,Channel等

一、简介

Message Queue的需求由来已久,80年代最早在金融交易中,高盛等公司采用Teknekron公司的产品,当时的Message queuing软件叫做:the information bus(TIB)。 TIB被电信和通讯公司采用,路透社收购了Teknekron公司。之后,IBM开发了MQSeries,微软开发了Microsoft Message Queue(MSMQ)。这些商业MQ供应商的问题是厂商锁定,价格高昂。2001年,Java Message queuing试图解决锁定和交互性的问题,但对应用来说反而更加麻烦了。

于是2004年,摩根大通和iMatrix开始着手Advanced Message Queuing Protocol (AMQP)开放标准的开发。2006年,AMQP规范发布。2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ 1.0 发布。

二、AMQP 的基本概念

AMQP(RabbitMQ)必须由三部分:交换器(exchange)、队列(queue)和绑定(binding)
AMQP基本概念

  • 消息(Message):由有效载荷(playload)和标签(label)组成。其中有效载荷既传输的数据。
  • 生产者(producer):创建消息,发布到代理服务器(Message Broker)。
  • 代理服务器(Message Broker):接收和分发消息的应用,RabbitMQ Server就是消息代理服务器,其中包含概念很多,以RabbitMQ 为例:信道(channel)、队列(queue)、交换器(exchange)、路由键(routing key)、绑定(binding key)、虚拟主机(vhost)等。
  • 信道(channel): 应用程序(生产与/或消费)和代理服务器之间TCP连接内的虚拟连接,解决TCP连接数量限制及降低TCP连接代价。每个信道有一个ID,其概念与“频分多路复用”类似。参考上图:AMQP基本概念
  • 队列(queue):消息最终到达队列中,等待消费者消费。使用“basic.consume”订阅可获得队列全部消息,“basic.get”订阅只能获得队列的一条消息(如果队列中存在消息)。如果无人订阅,消息将在队列中存储,等待订阅;如果多个消费者同时订阅该队列,消息将以自动轮询(round-robin)方式发送给消费者(Fanout Exchange,每个消费者只能获得队列中消息的子集)
  • 交换器(exchange):消息到达代理服务器的第一站,根据分发规则,匹配查询表中的(routing key)路由键(Fanout Exchange除外),分发消息到队列(queue)中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
  • 路由键(routing key):消息发送给交换器时,消息将拥有一个路由键(默认为空),交换器根据这个路由键将消息发送到匹配的队列中。
  • 绑定键(binding key):队列需要通过绑定键(默认为空)绑定到交换器上,交换器将消息的路由键与所绑定队列的绑定键进行匹配,正确匹配的消息将发送到队列中。路由键是偏向生产的概念,而绑定键是偏向消费的概念。
  • 虚拟主机(vhost):AMQP概念的基础,其本质上就是一个mini版的代理服务器(拥有自己的队列、交换器和绑定,更重要的是,拥有自己的权限机制),RabbitMQ默认的vhost:“/”(类似于网络中的namespace),每个用户只能访问自己的vhost(通常会被指派至少一个vhost),进而用户只能访问自己的队列、交换器和绑定,所以vhost之间是绝对隔离的(安全性与可移植性)。
  • 消费者(consumer):连接到代理服务器,并订阅到队列(queue)上,代理服务器将发送消息给一个订阅的/监听的消费者,消费者其只能接收消息的一部分:有效载荷(playload)。

三、交换器、队列、绑定是怎么一回事

生产者发送消息到broker server(RabbitMQ)。在Broker内部,用户创建Exchange/Queue,通过Binding规则将两者联系在一起。Exchange分发消息,根据类型/binding的不同分发策略有区别。消息最后来到Queue中,等待消费者取走。

3.1 交换器类型

在RabbitMQ中,生产者发送消息不会直接将消息投递到队列中,而是先将消息投递到交换机中,在由交换机转发到具体的队列,队列再将消息以推送或者拉取方式给消费者进行消费

  • direct交换器
    如果路由键(routing key)匹配成功,消息就被投递到对应的各个队列,绑定键(binding key)不支持“*”和“#”。消费者在接受消息的信道上可以给生产者反馈。
    在这里插入图片描述
    Message中的“routing key”如果和Binding中的“binding key”一致, Direct exchange则将message发到对应的queue中。
  • fanout
    不存在(routing key)路由键,消息以自动轮询(round-robin)的形式发送到对应的队列(幼儿园给孩子分苹果,如果苹果足够多,将平均分配给每个人),队列不存在绑定键(binding key),消费者在接受消息的当前信道上可以给生产者反馈。
    在这里插入图片描述

每个发到Fanout类型Exchange的message都会分到所有绑定的queue上去。

  • topic
    存在(routing key)路由键,消息以广播的形式发送到绑定键(bing key)匹配的各个队列,绑定键(binding key)支持“”和“#”
    “#”通配任何零个或多个word
    ”通配任何单个word
    这里也推荐给想要了解RabbitMQ的同学一个网站,http://tryrabbitmq.com ,它提供在线RabbitMQ 模拟器,可以帮助理解Exchange/queue/binding概念。
    根据routing key,及通配规则,Topic exchange将分发到目标queue中。
    在这里插入图片描述

  • headers (已废弃)

相关文章:

【RabbitMQ实战】04 RabbitMQ的基本概念:Exchange,Queue,Channel等

一、简介 Message Queue的需求由来已久,80年代最早在金融交易中,高盛等公司采用Teknekron公司的产品,当时的Message queuing软件叫做:the information bus(TIB)。 TIB被电信和通讯公司采用,路透…...

APACHE NIFI学习之—RouteOnAttribute

RouteOnAttribute 描述: 使用属性表达式语言根据其属性路由数据流,每个表达式必须返回Boolean类型的值(true或false)。 标签: attributes, routing, Attribute Expression Language, regexp, regex, Regular Expression, Expression Language, 属性, 路由, 表达式, 正则…...

防火墙网络接口下面多个外网地址,只有第一地址可以访问通其他不通

环境: 主备防火墙 8.0.75 AF-2000-FH2130B-SC 问题描述: 两台防火墙双击热备,高可用防火墙虚拟网络接口Eth4下面有多个外网地址,只有第一地址可以访问通其他不通 解决方案: 1.检查防火墙路由设置(未解决…...

【HTTP】URL结构、HTTP请求和响应的报文格式、HTTP请求的方法、常见的状态码、GET和POST有什么区别、Cookie、Session等重点知识汇总

目录 URL格式 HTTP请求和响应报文的字段? HTTP请求方法 常见的状态码 GET 和 POST 的区别 Cookie 和 Session URL格式 ?:是用来分割URL的主体部分(通常是路径)和查询字符串(query string)…...

苹果mac电脑显示内存不足如何解决?

忍痛删应用、删文档、删照片视频等等一系列操作都是众多Mac用户清理内存空间的方法之一,悲催的是一顿“猛如虎的操作”下,释放出来的内存空间却少的可怜,原因很简单,这样释放内存空间是无效的。如何合理有效的清理内存空间&#x…...

如何在Windows 10上安装Go并搭建本地编程环境

引言 Go是在谷歌的挫折中诞生的编程语言。开发人员不得不不断地选择一种执行效率高但需要长时间编译的语言,或者选择一种易于编程但在生产环境中运行效率低的语言。Go被设计为同时提供这三种功能:快速编译、易于编程和在生产中高效执行。 虽然Go是一种通用的编程语…...

[Realtek sdk-3.4.14b]RTL8197FH-VG 2.4G to WAN吞吐量低于60%的问题分析及解决方案

问题描述 RTL8197FH-VG 2.4G wifi to WAN吞吐量低于65%的标准,正常2T2R的wifi 300Mbps x 65% = 195Mbps,但是实际只能跑到160Mbps,这个时候CPU的idl已经为0,sirq占用率达到98%左右 网络拓扑 一台PC通过2.4G WiFi连接到RTL8197FH-VG,另外一台PC直接通过WAN口连接到RTL8197…...

软件设计模式系列之十八——迭代器模式

1 模式的定义 迭代器模式是一种行为型设计模式,它允许客户端逐个访问一个聚合对象中的元素,而不暴露该对象的内部表示。迭代器模式提供了一种统一的方式来遍历不同类型的集合,使客户端代码更加简洁和可复用。 2 举例说明 为了更好地理解迭…...

前端项目配置 prettier、eslint、lint-stages、husky、commitlint 、style-lint设置代码书写和提交规范

prettier中文网:Options Prettier 中文网 eslint中文网 :ESLint 中文网 github husky : https://github.com/typicode/husky commitlint.js 官网:commitlint - Lint commit messages 、github:GitHub - conventiona…...

如何开始着手一篇Meta分析 | Meta分析的流程及方法

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,最早出现于“循证医学”,现已广泛应用于农林生态,资源环境等方面。…...

【PID控制技术】

PID控制技术 简介控制原理相关术语调参技巧相互作用 相似算法与PWM对比 应用范围优缺点硬件支持 简介 PID控制是一种在工业过程控制中广泛应用的控制策略,其全称是比例-积分-微分(Proportional Integral Derivative)控制。它的基本原理是根据…...

docker openjdk:8-jdk-alpine 修改时区、添加字体

新建Dockerfile文件,制作新镜像 FROM openjdk:8-jdk-alpine 1、解决字体问题 RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/* 2、解决时差问题 # 解决时差8小时问题ENV TZAsia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /et…...

9+单细胞+实验验证,探讨单基因对癌细胞转移作用的思路方向

今天给同学们分享一篇单细胞实验的生信文章“Identification of RAC1 in promoting brain metastasis of lung adenocarcinoma using single-cell transcriptome sequencing”,这篇文章于2023年5月18日发表在Cell Death Dis期刊上,影响因子为9。 本研究旨…...

《计算机视觉中的多视图几何》笔记(7)

7 Computation of the Camera Matrix P P P 这章讲的是摄像机参数估计。摄像机标定,本质上就是求摄像机矩阵 P P P,当我们知道足够多的 X ↔ x X \leftrightarrow x X↔x,我们该如何计算 P P P?如果知道3D和2D点的对应&#xff…...

Python经典练习题(四)

文章目录 🍀第一题🍀第二题🍀第三题 🍀第一题 题目:打印出如下图案(菱形): 我们首先分析一下,本题实现的步骤主要有两个,分别是前四行和后三行 前四行:第一…...

Mac Pro在重装系统时提示“未能与恢复服务器取得联系”

检查网络连接: 确保你的Mac Pro连接到稳定的网络。尝试更换其他网络,例如切换到不同的Wi-Fi或使用有线连接。 系统时间校正: 错误的系统时间有时会导致与恢复服务器的连接问题。在恢复模式下打开终端(在实用工具菜单中选择终端&a…...

【C/C++】指针常量、常量指针、指向常量的常指针

目录 1.概念2. const pointer3. pointer to a constant3.1 (pointer to a constant)-constant3.2 poiner-constant3.3 (pointer to a constant)-variable3.4 poiner-variable3.5 多层级关系时的兼容3.6 用处 4. a constant pointer to a constant 1.概念 首先明确这几个术语的…...

【VUE复习·4】计算属性computed:原理、完整写法(不常用)、与 methods 的区别、简写(最常用)、应用案例!

总览 1.简介计算属性 2.computed 与 methods 的区别 3.computed 的简写(不修改计算属性,只显示) 4.经典应用场景 一、计算属性 1.为什么需要计算属性? 首先,如果我们要写一个插值语法,而 {{ }} 内的内容…...

Linux 基本语句_编译C过程

Linux撰写C语言并编译的过程 1、预处理 将所有的#define删除,并且展开所有的宏定义,并且处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等。处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。删除…...

MYSQL8解压版 windows 主从部署步骤及配置(包含配置文件,教程文件,免积分下载)

MYSQL8解压版 windows 主从部署步骤及配置 一.安装MSYQL 这里只讲大概,详细步骤、my.ini文件、安装包等会在页尾文件中(正常情况按首个mysql安装,只是名字有区别) 1.主库my.ini配置 [mysqld] #典型的值是5-6GB(8GB内存),8-11GB(16GB内存), 20-25GB(32GB内存)&…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理&#xff1a…...

线程同步:确保多线程程序的安全与高效!

全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...