rabbitMQ简介

news2025/1/22 15:46:58

rabbitMQ简介

  1. 目前应用最广泛的一个基于AMQP规范的开源的消息中间件
  2. RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现

rabbitMQ的重要概念

  1. Message:消息,消息是没有名称的,消息由消息头和消息体组成;消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)是最重要的属性、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等
  2. publisher:消息的发送者,消息的生产者,也是一个向交换器发布消息的客户端应用程序
  3. exchange:交换器,用来接收发送者发出的消息,并将消息分发给对应的队列,一共有四种不同的交换器,分别是direct,fanout,topic,headers
  4. Queue:队列,消息存储在队列中,并且由消费者取走
  5. Binding:消息队列和交换器之间的关联,一个exchange可以对应多个queue,一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表
  6. Exchange 和Queue的绑定可以是多对多的关系
  7. Connection:连接
  8. channel:信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。
  9. customer:消费者,表示一个从消息队列中取得消息的客户端应用程序
  10. broker:消息服务器实体
  11. virtual host:虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。
    在这里插入图片描述

RabbitMQ运行机制

AMQP 中消息的路由过程和 Java 开发者熟悉的 JMS 存在一些差别,AMQP 中增加了 Exchange 和 Binding 的角色。生产者把消息发布到 Exchange 上,消息最终到达队列并被消费者接收,而 Binding 决定交换器的消息应该发送到那个队列。
在这里插入图片描述
Exchange类型
Exchange分发消息时根据类型的不同分发策略有区别,目前共四种类型:direct、fanout、topic、headers 。headers 匹配 AMQP 消息的 header 而不是路由键, headers 交换器和 direct 交换器完全一致,但性能差很多,目前几乎用不到了,所以直接看另外三种类型:
在这里插入图片描述
消息中的路由键(routing key)如果和 Binding 中的 binding key 一致, 交换器就将消息发到对应的队列中。路由键与队列名完全匹配,如果一个队列绑定到交换机要求路由键为“dog”,则只转发 routing key 标记为“dog”的消息,不会转发“dog.puppy”,也不会转发“dog.guard”等等。它是完全匹配、单播的模式
每个发到 fanout 类型交换器的消息都会分到所有绑定的队列上去。fanout 交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。fanout 类型转发消息是最快的。
topic 交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“*”。#匹配0个或多个单词,*匹配一个单词。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/151618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

腾讯安全联合Gartner发布SOC+白皮书,助力政企构筑实战化安全运营体系

随着数字化浪潮的蓬勃兴起,各类政企机构上云步伐加快。与此同时,如高危漏洞、勒索病毒、挖矿木马、APT攻击等威胁层出不穷,安全形势日益严峻。许多政企机构虽部署了较为完备的基础安全产品,但防御体系仍以异构设备堆叠式为主&…

STM32+ESP8266+机智云+DHT11数据上传

机智云 文章目录机智云前言一、工程的修改二、数据的上传1.标识符2.数据处理3.数据上传三、app控制前言 今天搞了一下机智云,就想把温湿度发到app上去,然后能够控制灯的开关。之前从来没有用过这个玩意,用阿里云和点灯科技多一点&#xff0c…

恭喜 OpenSergo 获得中国开源云联盟 2022 “优秀开源项目”

作者:OpenSergo 为了营造良好的开源氛围,为我国开源产业发展注入更多活力,中国开源云联盟(China Open Source Cloud League,简称“COSCL”) 组织开展了 2022 年度评选活动。并在今天的 2022 木兰峰会中公布了评选结果。 2022 木兰…

共享模型之管程(六)

1.park&unpark 1.1.概述 1>.他们是LockSupport类中的方法 // 暂停当前线程 LockSupport.park(); // 恢复某个线程的运行 LockSupport.unpark(暂停线程对象)注意:先park再unpark! 1.2.案例 Slf4j public class TestPark {public static void main(String[] args) th…

持续数据保护(CDP)适合档案数据备份吗?

几个月前笔者写过两篇针对档案长期保存库备份(或者说是档案数字资源长期保存策略)的文章,《电子档案备份相对于数据备份的特别之处》、《备份策略从“3-2-1”到“4-3-2-1”》,但是很多读者依然觉得不解渴,因为目前绝大…

Activity和Fragment的生命周期总结以及保存实例状态机制

读完将收获以下内容 一. Activity的生命周期详解 Activity配置和状态改变时生命周期 Activity状态和配置改变时的解决方案 二.Fragment的生命周期详解 Fragment配置和状态改变时生命周期 Fragmen状态和配置改变时的解决方案 三.Activity和Fragment的生命周期调用顺序 一. Acti…

笔记--Qt Pro语法总结

QT pro文件: 任何一个 Qt 项目都至少包含一个 pro 文件,此文件负责存储与当前项目有关的配置信息,比如: 项目中用到了哪些模块? 项目中包含哪些源文件,哪些头文件,它们的存储路径是什么&…

德育知识元素挖掘系统设计 软件工程 spring boot + Vue.js + python机器学习

第一章 绪论 摘要 当今社会发展迅速,机器学习相关技术快速在各行各业普及,制作数据挖掘系统的需求日益增长。同时,随着社会发展不断推进,对学生进行德育教育的规模越做越大,成为了教育行业发展的一大趋势。对于较大规模…

glibc 2.31 pwn——house of pig原题分析与示例程序

house of pig这种利用方式来源于XCTF 2021 final中的同名题,其原题使用的是libc 2.31版本,本文就根据这道题学习一下这种漏洞利用方式。 参考资料 这是一道C pwn,但漏洞本身与C不同于C的特性关系不大。 一共提供了5个选项: 增&…

idea无法安装插件

不能安装插件,首先需要确定是问题,最常见的是无法下载和安装不上, 1.无法下载解决版本 无法下载很多时候就是延迟太高导致的,我们先打开插件官网看一下 Python - IntelliJ IDEs Plugin | Marketplace 如果网站无法打开&#xf…

【测试】用例篇

努力经营当下,直至未来明朗! 文章目录一、设计测试用例的万能公式二、设计测试用例的具体方法1. 等价类2. 边界值3. 因果图(判定表)4. 场景设计法5. 正交法6. 错误猜测法:sparkles: 小结普通小孩也要热爱生活! 一、设…

JS数据类型判断的九种方式

JS 的数据类型检测是一道经典的八股文面试题。相信大家都能条件反射的回答出 4 种方法:typeof、constructor、instanceof 和 Object.prototype.toString,并且对它们各自的优缺点也是张口就来。 本文对这些方法做了简单归纳,同时又补充了其他…

Leetcode:112. 路径总和、113. 路径总和 II(C++)

目录 112. 路径总和: 问题描述: 实现代码与解析: 递归: 原理思路: 迭代: 原理思路: 113. 路径总和 II: 问题描述: 实现代码与解析: 迭代&#xff…

分享66个NET源码,总有一款适合您

NET源码 分享66个NET源码,总有一款适合您 NET源码下载链接:https://pan.baidu.com/s/1-H0UV3yly3p1PXbeLAvMtA?pwdk06f 提取码:k06f page_count 1 # 每个栏目开始业务content"text/html; charsetgb2312"base_url "http…

go defer return panic 执行顺序

根据代码实例运行结果来总结说明:定义一个函数,有多个defer (用于判断多个defer执行顺序),有panic和 return (判断与defer对比执行顺序)一、函数中有panicpackage mainimport "fmt"fu…

【矩阵论】8. 常用矩阵总结——秩1矩阵,优阵(单位正交阵),Hermite阵

矩阵论 1. 准备知识——复数域上矩阵,Hermite变换) 1.准备知识——复数域上的内积域正交阵 1.准备知识——Hermite阵,二次型,矩阵合同,正定阵,幂0阵,幂等阵,矩阵的秩 2. 矩阵分解——SVD准备知识——奇异值…

【性能调优】【离线任务】flink处理离线任务(8000个小文件?200多亿数据量?)稳定性与性能调优探索

文章目录一、场景描述1. 任务类型描述2. 问题任务二、相关理论1.Task Slots and Resources1.1. slots与资源的隔离和共享1.2 建议cpu和slot数关系2. tm的资源配置是否合适2.1. flink load problems2.2. 阿里 flink资源配置建议三、问题分析与解决1. 测试结果比对1.1. 任务11.2.…

小程序学习(2)-----常用的各类组件

新建项目 项目->新建项目-小程序,如下图所示 新建小程序页面 只需要在 app.json->pages 中新增页面的存放路径,小程序开发者工具可帮我们自动创建对应的页面文件,如图所示: 2.常用的视图容器类组件 ① view 普通视图区域类…

Java基础算法每日5道详解(3)

136. Single Number 单号 Given a non-empty array of integers nums, every element appears twice except for one. Find that single one. You must implement a solution with a linear runtime complexity and use only constant extra space. 给定一个非空整数数组 nu…

在Multisim导入TI提供的SPICE模型

对在multisim中导入TI模型的一个记录。 multisim中只有常规的元器件,对于很多元器件multisim都没有相应的模型,这就需要手动导入了。 Multisim导入模型1、从官网下载相应的模型文件2、在Multisim中导入模型3、写在后面1、从官网下载相应的模型文件 &…