RabbitMQ详解

RabbitMQ

概念

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。

AMQP :Advanced Message Queue,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。具体特点包括:

  1. 可靠性(Reliability):RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。

  2. 灵活的路由(Flexible Routing):在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也通过插件机制实现自己的 Exchange 。

  3. 消息集群(Clustering):多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker 。

  4. 高可用(Highly Available Queues):队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。

  5. 多种协议(Multi-protocol):RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等。

  6. 多语言客户端(Many Clients):RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。

  7. 管理界面(Management UI):RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面。

  8. 跟踪机制(Tracing):如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。

  9. 插件机制(Plugin System):RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

RabbitMQ 架构

image-20231229193405271

Message

消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括 routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。

Publisher

消息的生产者,也是一个向交换器发布消息的客户端应用程序。

Exchange(将消息路由给队列 )

交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。

Binding(消息队列和交换器之间的关联)

绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。

Queue

消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

Connection

网络连接,比如一个 TCP 连接。

Channel

信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的 TCP 连接内地虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。

Consumer

消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。

Virtual Host

虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。

Broker

表示消息队列服务器实体。

Exchange 类型

Exchange 分发消息时根据类型的不同分发策略有区别,目前共四种类型:direct、fanout、topic、headers 。headers 匹配 AMQP 消息的 header 而不是路由键,此外 headers 交换器和direct 交换器完全一致,但性能差很多,目前几乎用不到了,所以直接看另外三种类型:

Direct 键(routing key)分布:
  1. Direct:消息中的路由键(routing key)如果和 Binding 中的 binding key 一致,交换器就将消息发到对应的队列中。它是完全匹配、单播的模式。

image-20231229193722173

Fanout(广播分发)
  1. Fanout:每个发到 fanout 类型交换器的消息都会分到所有绑定的队列上去。很像子网广播,每台子网内的主机都获得了一份复制的消息。fanout 类型转发消息是最快的。

image-20231229193738374

topic 交换器(模式匹配)
  1. topic 交换器:topic 交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“”。#匹配 0 个或多个单词,匹配不多不少一个单词。

image-20231229193808100

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

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

相关文章

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题)

2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 2023年全国网络安全行业职业技能大赛数据安全管理员操作技能赛题(样题) 第一部分:数据安全防护(30%) 第二部分:数据安全管理(30%) 第三部分:数据安全处置(40%) 项目介绍…

C#常用类

一、C#常用类 C#中有一些具有特定功能的类,例如操作字符串的类、用于操作日期的类、生成随机数的类 字符串的基本特征 1、字符串的不可变性 字符串对象一旦创建,就无法对其进行修改。 .NET框架的底层提供了一种机制,当一个字符串已经被创建…

React Native 从类组件到函数组件

1. 发展趋势 React Native社区中的趋势是朝向使用函数组件(Functional Components)和Hooks的方向发展,而不是使用类组件(Class Components)。 React Native自推出Hooks API以来,函数组件和Hooks的使用变得…

【JavaEE】多线程(7) -- 线程池的概念和简单实现

目录 1.线程池是什么 2.标准库中的线程池 2.1ThreadPoolExecutor 2.2构造方法参数介绍 2.3拒绝策略(面试易考) 2.4Executor的使用 3.实现线程池 1.线程池是什么 线程池是一种用来管理线程的机制,它可以有效地控制线程的创建、复用和销毁,从而提高程…

程序的编译、链接

目录 前言: 前置知识回顾 宏 宏定义常量 宏定义语句 宏定义函数 条件编译 应用场景 编译过程概览 预编译阶段 编译阶段 汇编阶段 链接阶段 前言: 在ANSI C的任何一种实现中,存在两种不同的环境,第1种是翻译环境&#x…

EE Vocabulary(电气工程词汇库)

前言 整理了一些EE(电子工程)和CS(计算机)专业的学生们阅读英文文献或写论文常用的一些词汇。 仓库GitHub地址:https://github.com/Phillweston/EE_Vocabulary 内容 仓库包含以下格式的电气工程词汇: …

GPT-5、开源、更强的ChatGPT!OpenAI公布2024年计划

年终岁尾,正值圣诞节热闹气氛的OpenAI写下了2024年的发展清单。 OpenAI联合创始人兼首席执行官Sam Altman在社交平台公布,AGI(稍晚一些)、GPT-5、更好的语音模型、更高的费率限制; 更好的GPTs;更好的推理…

代码随想录算法训练营第三十二天|122.买卖股票的最佳时机II、 55. 跳跃游戏、45.跳跃游戏II

122.买卖股票的最佳时机II 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 文档讲解:代码随想录 视频讲解:贪心算法也能解决股票问题!LeetCode:122.买卖股票最佳时机II_哔哩哔哩_bi…

大数据- Hadoop入门

目录 🐶2.1 hadoop的简介 1. 概述 2. 什么是分布式? 3. Hadoop的指代 🐶2.2 hadoop的发展历程 🐶2.3 hadoop的版本介绍 🐶2.4 hadoop的常用端口号 🐶2.5 hadoop的设计目的 🐶2.6 hadoo…

Java集合/泛型篇----第二篇

系列文章目录 文章目录 系列文章目录前言一、说说List,Set,Map三者的区别二、Array与ArrayList有什么不一样?三、Map有什么特点四、集合类存放于 Java.util 包中, 主要有几 种接口前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。…

upload-labs Pass-03(黑名单验证,特殊后缀)问题纠正

php任何后缀名解析 背景:为了验证php解析不依靠后缀名,可以是任何后缀名,纠正upload-labs Pass-03(黑名单验证,特殊后缀)里所说的几个固定的后缀名理论是错误的。1 部署1.1 环境准备1.1.1 系统、内核&#…

【音视频 ffmpeg 学习】 跑示例程序 持续更新中

环境准备 在上一篇文章 把mux.c 拷贝到main.c 中 使用 attribute(unused) 消除警告 __attribute__(unused)/** Copyright (c) 2003 Fabrice Bellard** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated docu…

计算机毕业设计-----ssm流浪狗领养系统

项目介绍 我国的动物管理正处于起步阶段,注册在线的宠物数量非常有限,信息也很封闭,因此必须发挥民间力量扩容,加强宠物信息的宣传力度,使更多爱护动物的好心人可以领养宠物,同时也就收纳有家宠物信息&…

Efficient Classification of Very Large Images with Tiny Objects(CVPR2022补1)

文章目录 Two-stage Hierarchical Attention SamplingOne-stageTwo-Stage内存需求 Efficient Contrastive Learning with Attention Sampling Two-stage Hierarchical Attention Sampling 一阶段缩放是hw,提取的特征是h1w1, 二阶段缩放是uv(…

Mongodb聚合操作中的$type

在mongodb查询语句中,用户可以通过指定$type值,查询出的符合字段类型的文档数据。在mongodb聚合操作中,也存在$type操作符。本文就聚合操作中的$type进行介绍。 定义 返回一个表示传入参数BSON类型的字符串。在聚合操作中,按照下…

leetcode贪心(最大子序列和、分发饼干、摆动序列)

455.分发饼干 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有…

iPortal内置Elasticsearch启动失败的几种情况——Linux

作者:yx 文章目录 前言一、端口占用二、ES启动过慢三、磁盘占用过高,导致ES变为只读模式 前言 在Linux环境启动iPortal后有时会出现搜索异常的情况,如下截图,这是因为Elasticsearch(以下简称“ES”)没启动…

快速理解ASCII、GBK、Unicode、UTF-8、ANSI

文章大部分内容来源于非官方说明,且无法用逻辑推理出结果,准确性仅供参考。 ASCII 计算机是老外发明的,想让计算机实现更多的功能,必然少不了把常用的字母和符号存进去,甚至包含一些特殊符号,于是ASCII码…

剑指 Offer(第2版)面试题 60:n 个骰子的点数

剑指 Offer(第2版)面试题 60:n 个骰子的点数 剑指 Offer(第2版)面试题 60:n 个骰子的点数解法 1:递归解法 2:动态规划 剑指 Offer(第2版)面试题 60&#xff1…

共享单车之数据可视化

文章目录 第1关:绘制地图第2关:绘制流量最高的五条线路的路程图 第1关:绘制地图 任务描述 本关任务:使用JSP在百度地图上绘制一条共享单车起始路程。 相关知识 为了完成本关任务,你需要掌握: 如何创建地…