《RabbitMQ篇》基本概念介绍

MQ功能

  1. 解耦
    MQ允许不同系统或组件之间松散耦合。发送者和接收者不需要直接连接,从而提高了系统的灵活性和可维护性。
  2. 异步处理
    使用MQ可以实现异步消息传递,发送者可以将消息放入队列后立即返回,不必等待接收者处理。这提高了系统的响应速度和吞吐量。
  3. 流量控制
    消息队列可以帮助平衡生产者和消费者之间的负载。当生产者发送消息的速度快于消费者处理的速度时,消息会在队列中积压,从而防止系统过载。
  4. 消息持久性
    许多MQ系统支持将消息持久化到磁盘,这确保了即使在系统崩溃的情况下,也能保证消息不会丢失。
  5. 延迟处理
    MQ可以设置延迟队列,使消息在特定时间后才被消费。这对于某些需要延时处理的场景非常有用。
  6. 可靠性
    通过消息确认机制,接收者可以确认已成功处理消息,未确认的消息可以重新发送。这增加了系统的可靠性。
  7. 分布式系统支持
    MQ非常适合分布式系统中的服务间通信,能够有效管理不同服务之间的消息传递。
  8. 事务支持
    一些消息队列支持事务,可以确保一组操作要么全部成功,要么全部失败,这对于确保数据一致性很重要。

基本概念

生产者

产生数据发送消息的程序是生产者

交换机

交换机是rabbitmq非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中,交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定。

队列

队列是rabbitmq内部使用的一种数据结构,尽管消息流经rabbtmq和应用程序,但它们只能存储在队列中,队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据,这就是我们使用队列的方式

消费者

消费与接收具有相似的含义,消费者大多时候是一个等待接收消息的程序。请注意生产者,消费

者和消息中间件很多时候并不在同一机器上。同一个应用程序既可以是生产者又是可以是消费者。

工作过程

Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker

Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等

Connection:publisher/consumer 和 broker 之间的 TCP 连接

Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP method 包含了 channel id 帮助客户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销

Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发 消息到 queue 中去。常用的类型有:direct (point-to-point),topic (publish-subscribe) and fanout (multicast)

Queue:消息最终被送到这里等待 consumer 取走

Binding:exchange 和 queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存到 exchange 中的查询表中,用于 message 的分发依据

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka学习笔记(一)Kafka基准测试、幂等性和事务、Java编程操作Kafka

文章目录 前言4 Kafka基准测试4.1 基于1个分区1个副本的基准测试4.2 基于3个分区1个副本的基准测试4.3 基于1个分区3个副本的基准测试 5 Java编程操作Kafka5.1 引入依赖5.2 向Kafka发送消息5.3 从Kafka消费消息5.4 异步使用带有回调函数的生产消息 6 幂等性6.1 幂等性介绍6.2 K…

【BurpSuite】SQL注入 | SQL injection(1-2)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 【BurpSuite】SQL注入 | SQL injection(1-2) 实验一 Lab: SQL injection vulnerability in WHERE clause…

基于微信的乐室预约小程序+ssm(lw+演示+源码+运行)

摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整个…

字体文件压缩

技术点 npm、html、font-spider 实现原理 个人理解:先引入原先字体,然后重置字符为空,根据你自己填充文字、字符等重新生成字体文件,因此在引入的时候务必添加自己使用的文字、字符等!!! 实…

TDengine 流计算与窗口机制的深度解析:揭示计数窗口的关键作用

在 TDengine 3.2.3.0 版本中,我们针对流式计算新增了计数窗口,进一步优化了流式数据处理的能力。本文将为大家解读流式计算与几大窗口的关系,并针对新增的计数窗口进行详细的介绍,帮助大家进一步了解 TDengine 流式计算&#xff0…

解决MySQL报Incorrect datetime value错误

目录 一、前言二、问题分析三、解决方法 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进哦~ 博客主页链接点这里–>:权权的博客主页链接 二、问题分析 这个错误通常出现在尝试将一个不…

沂机管理系统/data/Ajax.aspx接口存在SQL注入漏洞

漏洞描述 沂机管理系统/data/Ajax.aspx接口存在SQL注入漏洞,攻击者可以获取服务器权限 漏洞复现 body"后台管理系统演示版" POC GET /data/Ajax.aspx?methodlog_list&page1&limit20&fkey1&fdate12024-10-0100%3A00%3A00&fdate2…

Postgresql源码(136)syscache/relcache 缓存及失效机制

相关 《Postgresql源码(45)SysCache内存结构与搜索流程分析》 0 总结速查 syscache:缓存系统表的行。通用数据结构,可以缓存一切数据(hash dlist)。可以分别缓存单行和多行查询。 syscache使用CatCache数…

AI 对话工具汇总

🐣个人主页 可惜已不在 🐤这篇在这个专栏AI_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 前言: 正文: 前言: 在科技飞速发展的时代,AI 对话正逐渐成为我们获取信息、交流思想的新方式。它以强…

算法笔记(四)——模拟

算法笔记(四)——模拟 文章目录 算法笔记(四)——模拟替换所有的问号提莫攻击Z字形变换外观数列数青蛙 模拟算法就是根据题目的要求,题目让干神马就做神马,一步一步来 替换所有的问号 题目:替换…

初识TCP/IP协议

回顾上文 来回顾一下TCP协议的特性,有一道比较经典的题:如何使用UDP实现可靠传输,通过应用程序的代码,完成可靠传输的过程? 原则,TCO有啥就吹啥,引入滑动窗口,引入流量控制&#x…

【RabbitMQ——具体使用场景】

1. 异步 1.1 同步异步的问题(串行) 串行方式:将订单信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端 public void makeOrder(){// 1 :保存订单 orderService.…

排水系统C++

题目: 样例解释: 1 号结点是接收口,4,5 号结点没有排出管道,因此是最终排水口。 1 吨污水流入 1 号结点后,均等地流向 2,3,5 号结点,三个结点各流入 1/3 吨污水。 2 号结点流入的 1/3​ 吨污水将均等地流向…

nginx打包部署前端vue项目全过程【保姆级教程】

🤹‍♀️潜意识起点:个人主页 🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持…

【JavaScript】Bit:组件驱动开发的新时代

Bit 是一个现代化的开发工具,帮助开发者通过组件驱动的方式进行软件开发和协作。它旨在解决开发大型系统时的常见挑战,如组件的复用性、独立性和协作性问题。通过 Bit,开发团队可以更加轻松地共享、管理和维护可复用的代码组件,同…

初识算法 · 双指针(2)

目录 前言: 盛最多水的容器 题目解析: 算法原理: 算法编写: 有效三角形的个数 题目解析: 算法原理: 算法编写: 前言: 本文介绍两个题目,盛最多水的容器和有效三…

Jenkins: fontconfig head is null, check your fonts or fonts configuration;

​ 在部署jenkins第一次启动时遇到如下报错: 一大串报错,看的让人脑瓜疼。。。静静地分析一下日志,发现第一行报错信息: fontconfig head is null, check your fonts or fonts configuration。 这是个什么鬼,我也不…

师生健康信息管理:SpringBoot技术突破

第4章 系统设计 4.1 系统体系结构 师生健康信息管理系统的结构图4-1所示: 图4-1 系统结构 登录系统结构图,如图4-2所示: 图4-2 登录结构图 师生健康信息管理系统结构图,如图4-3所示。 图4-3 师生健康信息管理系统结构图 4.2…

linux文件编程_文件

1. 文件编程概述 之前在windows中对文件的操作是:打开文档—>编辑文档—>保存文档—>关闭文档 我们的Linux文件编程主要是利用代码对文件进行操作:文件创建、打开、编辑等自动化执行等 在Linux我们要使用编程调用api函数的方式进行文档的编辑…

数据结构-链表笔记

移除节点 203. 移除链表元素 - 力扣(LeetCode) /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListN…