消息服务中间件之RabbitMQ

72、海洋地理信息系统:电子海图的全面解析 本文全面解析了海洋地理信息系统中的电子海图技术,从AIS数据的应用、电子海图数据的存储与显示,到电子导航的发展趋势和S-100通用水文数据模型的推广,系统地阐述了电子海图在现代航海中的核心作用及其未来发展方向。 阅读详情

什么是MQ?

MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中的消息。

一、RabbitMQ简介:

RabbitMQ是一个由Erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。

队列、生产者、消费者

队列是RabbitMQ的内部对象,用于存储消息。生产者(Publisher)生产消息并投递到队列中,消费者(Consumer)可以从队列中获取消息并消费。

这里写图片描述
多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。
这里写图片描述

二、核心概念

Message

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

Publisher

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

Exchange

交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
Exchange有4种类型:direct(默认),fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别

Queue

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

Binding

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

Exchange通过Binding与Queue产生关联。
Exchange和Queue的绑定可以是多对多的关系。

Connection

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

Channel

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

Consumer

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

Virtual Host

虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。

Broker

表示消息队列服务器实体。
这里写图片描述

三、RabbitMQ运行机制

AMQP 中的消息路由

AMQP 中消息的路由过程和 Java 开发者熟悉的 JMS 存在一些差别,AMQP 中增加了 Exchange 和 Binding 的角色。生产者把消息发布到 Exchange 上,消息最终到达队列并被消费者接收,而 Binding 决定交换器的消息应该发送到哪个队列。
这里写图片描述

Exchange的类型

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

  • direct

消息中的路由键(routing key)如果和 Binding 中的 binding key 一致, 交换器就将消息发到对应的队列中。路由键与队列名完全匹配,如果一个队列绑定到交换机要求路由键为“dog”,则只转发 routing key 标记为“dog”的消息,不会转发“dog.puppy”,也不会转发“dog.guard”等等。它是完全匹配、单播的模式。
这里写图片描述

  • fanout

每个发到 fanout 类型交换器的消息都会分到所有绑定的队列上去。fanout 交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。fanout 类型转发消息是最快的。
这里写图片描述

  • topic

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

  • # 匹配0个或多个单词
  • * 匹配一个单词。

这里写图片描述


最后来具体解析一下几个问题:

1、可以自动创建队列,也可以手动创建队列,如果自动创建队列,那么是谁负责创建队列呢?是生产者?还是消费者?

如果队列不存在,当然消费者不会收到任何的消息。但是如果队列不存在,那么生产者发送的消息就会丢失。所以,为了数据不丢失,消费者和生产者都可以创建队列。那么如果创建一个已经存在的队列呢?那么不会有任何的影响。需要注意的是没有任何的影响,也就是说第二次创建如果参数和第一次不一样,那么该操作虽然成功,但是队列属性并不会改变。

队列对于负载均衡的处理是完美的。对于多个消费者来说,RabbitMQ使用轮询的方式均衡地发送给不同的消费者。

2、RabbitMQ的消息确认机制

默认情况下,如果消息已经被某个消费者正确地接收到了,那么该消息就会被从队列中移除。当然也可以让同一个消息发送到很多的消费者。

如果一个队列没有消费者,那么,如果这个队列有数据到达,那么这个数据会被缓存,不会被丢弃。当有消费者时,这个数据会被立即发送到这个消费者,这个数据被消费者正确收到时,这个数据就被从队列中删除。

那么什么是正确收到呢?通过ack。每个消息都要被acknowledged(确认,ack)。我们可以显式地在程序中去ack,也可以自动地ack。如果有数据没有被ack,那么:

  • RabbitMQ Server会把这个信息发送到下一个消费者。
  • 如果这个app有bug,忘记了ack,那么RabbitMQ Server不会再发送数据给它,因为Server认为这个消费者处理能力有限。

而且ack的机制可以起到限流的作用(Benefitto throttling):在消费者处理完成数据后发送ack,甚至在额外的延时后发送ack,将有效地均衡消费者的负载。

问题转载自《RabbitMQ消息队列》

SAP Fiori Launchpad 上看不到任何 tile 应该怎么办? 中心UI组件是一个框架,为所有SAPFiori应用程序提供公共基础设施SAPFiorilaunchpad是所有SAPFioriUI的基础,并为SAPFiori应用程序提供基本功能,如登录,界面大小,应用程序之间的导航,和基于角色的应用程序目录。ABAP前端服务器包含所有基础设施组件,用于为客户端生成SAPFiori应用程序特定的UI,并与SAPBusinessSuite后端系统通信。SAPFiori应用程序的处理过程如下首先,客户端加载SAPFiori应用程序的界面。... 阅读详情

相关推荐

SAP交货单增强字段更新实战:手把手教你用BAPI_OUTB_DELIVERY_CHANGE和EXTENSION2参数

本文详细解析了如何使用BAPI_OUTB_DELIVERY_CHANGE和EXTENSION2参数实现SAP交货单增强字段的更新。从增强点SMOD_V50B0001的定位到字段落表的全流程,提供了ABAP代码示例和常见问题排查方法,帮助开发者高效完成交货单自定义字段的集成开发。

weixin_42525637的博客 451

Springboot RabbitMq源码解析之配置类

1. RabbitAutoConfiguration类 RabbitAutoConfiguration类是springboot的自动配置类。 @Configuration @ConditionalOnClass({ RabbitTemplate.class, Channel.class }) @EnableConfigurationProperties(RabbitProperties.class...

翻身已碰头的博客 3239

【AI气象6】Skilful nowcasting of extreme precipitation with NowcastNet

极端降水是气象灾害的重要因素,因此迫切需要通过高分辨率、长时间预报和局部细节的精准短期预报来减轻其社会经济影响。当前的方法存在模糊、衰减、强度或位置误差,基于物理的数值方法在捕捉关键的混沌动态(如对流起始)时面临挑战,而数据驱动的学习方法则未能遵循内在的物理法则(如平流守恒)。我们提出了 NowcastNet,这是一种针对极端降水的非线性短期预报模型,将物理演变方案与条件学习方法统一到一个端到端的神经网络框架中,通过优化预测误差进行训练。基于来自美国和中国的雷达观测数据,我们的模型能够生成物理上合理的降水短

weixin_51473374的博客 2323

RabbitTemplate的创建与配置

RabbitTemplate是我们在与SpringAMQP整合的时候进行发送消息的关键类该类提供了丰富的发送消息的方法,包括可靠性消息投递、回调监听消息接口ConfirmCallback、返回值确认接口ReturnCallback等等同样我们需要注入到Spring容器中,然后直接使用。在与spring整合时需要实例化,但是在与Springboot整合时,只需要添加配置文件即可首先将其注入到bean里面:如果自己不注入。

qq_37436172的博客 5203

【Autosar】学习总结-MCAL

一、简介 MCAL:微控制器抽象层;位于BSW层中的最下层; MCAL细分,可将驱动分为:微控制器驱动、存储器驱动、通信驱动、IO驱动: 二、MCAL的配置(EB-Tresos) 1.PORT 我理解的PORT:MCAL层中的IO驱动组中的pin脚总体配置: Port就是芯片上的每个pin脚,可以配置成DIO ADC PWM ICU等单引脚的功能,也能配置成CAN的TX或者RX、SPI的MOSI等等其他功能的单个pin脚功能; 总之,PORT就是芯片上的具体的某个引脚。 配置

zDavid_2018的博客 3万+

【系统分析师】2025年上半年真题:案例分析-答案及详解(回忆版)

摘要: 试题一考查面向对象分析,涉及用例模型构建的四个阶段(识别参与者、合并需求、细化描述、调整模型),分析CRM系统的参与者与用例,并说明用例间的包含、扩展和泛化关系。 试题二探讨嵌入式Docker,包括容器的轻量性、可移植性及隔离性含义,10项措施与7个规范方面的对应关系,以及优化容器切换时间的三种方法(如无状态连接优化)。 试题三聚焦数据库设计,分析订单表的函数依赖与范式分解(BCNF),讨论分解后是否保持函数依赖及无损性,并针对触发器的性能缺陷提出优化方案。 试题四解析Web开发中的MVC架构与SS

数据知道的博客 6602

【单元测试】SpringBoot集成单元测试报错:Bean method ‘mbeanServer‘ in ‘JmxAutoConfiguration‘ not loaded because

【代码】【单元测试】SpringBoot集成单元测试报错:Bean method ‘mbeanServer‘ in ‘JmxAutoConfiguration‘ not loaded because。

后端研发工程师Marion的博客 1195

双Orin PCIe RC&EP模式互通

orin pcie 互通

乐于分享 3877

springboot集成mq启动不了,可能的解决方法

上异常: "D:\Program Files\Java\jdk1.8.0_201\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true

weixin_42965737的博客 2071

EPLAN 电气制图(六):结构盒与设备管理器核心概念(基础知识选看)

结构盒是 EPLAN 中用于标识元件安装位置的逻辑容器,非实际设备或黑盒,仅用于原理图中划分功能区域或物理位置(如 “柜内”“柜外”)。标识符设置:在 “显示设备标识符” 中输入位置代号(如 “+ 柜外”),完整格式为 “= 高层代号 + 位置代号”;筛选与定位:通过 “筛选器” 按类别(如电机、接触器)快速查找设备,右键 “转到(图形)” 可高亮定位图纸中的元件;设备保护:重要设备可启用保护(【项目数据】→【设备】→【启用设备保护】),防止误删除(显示橙色圆圈标记)。

电工 1057

对halcon形状匹配算法的一点分析

基于Intel VTune Profiler对halcon形状匹配算法的一点分析

manuoo的专栏 566

206、SpringBoot 整合 RabbitMQ 的自动配置类 和 对应的属性处理类 的知识点

SpringBoot 整合 RabbitMQ 的自动配置类 和 对应的属性处理类 的知识点

Java 领域技术分享 2190

从Overleaf上导出Latex论文发布到arxiv详细教程(常见问题与解决)

如果是做cv的论文请选择“Computer Vision and Pattern Recognition”,选择“Artificial Intelligence”可能会被on hold,貌似这个指的是传统的人工智能?我用公司邮箱注册发布一篇论文,一个多月还是“on hold”状态,换成edu邮箱第二天就被发布了。3、有可能是subject class选错了,编辑会帮你手动选择,然后发一封邮件告知你解除……报错缺失bbl等文件,这是因为从Menu中下载的话,是没有bbl文件的。论文被on hold。

沉迷单车的追风少年 3584

手把手教你SpringBoot集成消息服务中间件RabbitMQ

1,大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力。2,消息服务中有两个概念:消息代理和目的地当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。3,消息队列主要由两种形式的目的地。​ (1)队列:点对点消息通信(一对一)​ (2)主题:发布/订阅消息通信(一对多)

刻苦的樊同学 1237

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IDEA-消息服务和RabbitMQ消息中间件环境搭建

在实际项目开发中,有时候需要与其他系统进行集成完成相关业务功能,这种情况最原始的做法是程序内部相互调用。 除此之外,还可以使用消息服务中间件进行业务处理,使用消息服务中间件能够提升系统的异步通信和扩展解耦能力。 消息服务概述 使用消息服务可以实现一个高性能、高可用、高扩展的系统,解决了异步处理、应用解耦、流量削峰、分布式事务管理等问题。 1.异步处理 场景:用户注册后,系统需要将信息写入数据库,并发送注册邮件和注册短信通知。 针对该场景,有三种处理方式 串行处理方式:用户发送注册请求后,服务器.

qq_39589936的博客 497

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

springboot消息服务中间件+RabbitMQ详解

概述: 1.在应用中,可通过消息服务中间件来提升系统异步通信,扩展解耦能力 2.消息服务中两个中主要概念: 消息代理(message broker) 和目的地(distination) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地 3.消息队列主要有两种形式的目的地 队列(queue):点对点消息通信 ...

xy294636185的博客 1292

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring Boot消息服务

Spring Boot消息服务 在实际项目开发中,有时候需要与其他系统进行集成完成相关业务功能,这种情况最原始的做法是程序内部相互调用,除此之外,还可以使用消息服务中间件进行业务处理,使用消息服务中间件处理业务能够提升系统的异步通信和扩展解耦能力。Spring Boot对消息服务管理提供了非常好的支持。 消息服务概述 为什么要使用消息服务 在多数应用尤其是分布式系统中,消息服务是不可或缺的重要部分,它使用起来比较简单,同时解决了不少难题,例如异步处理、应用解耦、流量削峰、分布式事务管理等,使用消息服务可以实

shi_zi_183的博客 5443

Spring Boot消息服务详解与代码示例

在现代软件开发中,消息服务是分布式系统不可或缺的重要部分。它不仅能够实现异步处理,还能帮助应用解耦、流量削峰和分布式事务管理等。本文将详细介绍如何在Spring Boot应用中集成消息服务,特别是使用RabbitMQ这一消息中间件。

2401_85956832的博客 885

VMware+消息服务RabbitMQ+消息中间件(broker)+消息队列

1.VMware 1.2 vmware网络故障,可以重置网络 编辑 — 虚拟网络编辑器 – 左下角按钮“还原默认设置” 会删除所有的虚拟网络,然后重新创建 1.3 NAT网络 统一设置成 64 网段 编辑 --- 虚拟网络编辑器 --- 选择 vmnet8 --- 左下角设置网段:192.168.64.0 1.4虚拟机 课前资料\虚拟机\ centos-8-2105 centos-7-1908 在这两个虚拟机中提供了基础配置: 阿里的 yum 安装源、扩展源 安装了 python、pip、ansib

weixin_58678891的博客 615

RabbitMQ - 基础

一、基础知识   大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力   消息服务中两个重要概念: 消息代理(message broker)和目的地(destination) 当消息发送者发送消息以后,将由消息代理接管,消息代理保证消息传递到指定目的地。   消息队列主要有两种形式的目的地 队列(queue):  点对点消息通信(point-to-point) 主题(top...

Prometheus的博客 196

消息中间件RabbitMQ---概述和概念 【一】

RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。

日常笔记 | 干货分享 | 毕设源码 | 毕设指导 | 答辩指导 683

消息服务和任务管理

通过本文的学习,我们了解了Spring Boot中的消息服务和任务管理。消息服务通过RabbitMQ等中间件,实现了异步处理、应用解耦和流量控制等功能;任务管理通过@Async注解实现了异步任务,通过@Transactional注解实现了事务管理,通过@Scheduled注解实现了任务调度。这些功能在实际开发中具有重要意义,能够提高系统的并发处理能力、数据一致性和自动化水平。Spring Boot的简洁性和高效性,使得开发人员能够更专注于业务逻辑的实现,而不是繁琐的配置和部署。

2401_85454022的博客 1344

Spring Boot 实践之十一 Spring Boot消息服务(RabbitMQ消息中间件/Spring Boot与RbbitMQ整合实现)

注:实践内容参考人民邮电出版社的教程《 Spring Boot企业级开发教程》作者:黑马程序员,上传本文仅以实践过程以供大家共同学习解决问题,如有侵权不当行为,请告知后,我会更正或删除。 1 消息服务概述 1.1 为什么 要使用消息服务 1.2 常用消息中间件介绍 2 RabbitMQ消息中间件 2.1 RabbitMQ简介 2.2 RabbitMQ工作模式介绍 3 RabbitMQ安装以及整合环境搭建 3.1 安装RabbitMQ 2.RabbitMQ安装 (1)安装Erl

qq_26665293的博客 1785

消息中间| JAVA消息中间件概述

文章目录什么是中间件?什么是消息中间件?什么是Java消息服务(JMS)?什么是AMQP?JMS与AMQP对比?几种常见消息中间件ActiveMQRabbitMQKafka综合评价 什么是中间件? 中间件(英语:Middleware),又译中间件、中介层,是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,在现代信息技术应用框架如Web服务...

YvesHe的专栏 1403

五阶段--消息服务、消息中间件(broker)、消息队列/rabbitmq的使用场景/六种工作模式

一消息服务、消息中间件(broker)、消息队列 1搭建 Docker 环境 克隆 centos-8 或 centos-7: docker-base 设置ip ./ip-static ip: 192.168.64.150 ​ ifconfig 注意:若这里出现error,需要使用这两个命令,再重新设置ip nmcli n on systemctl restart NetworkManager 3.安装 docker,参考csdn笔记:Docker(一) -...

weixin_58580280的博客 1859

JMS消息中间件

JMS(目前Spring框架整合的Spring-jms 使用最稳定最新的版本是5.1.3)** JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。 JMS即Java消息服务(Java Message Se...

weixin_43595438的博客 335
上一篇: 消息服务中间件之概述
下一篇: 文件上传
章 鱼
博客等级 码龄10年 203粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值