RabbitMq camel

真实的项目如果 交换器/ 队列很多  建议在管理页面新建exchange / queue/ rootingKey /vhost, 而不要写死在springboot项目里

camel按rooting key发送消息:  最推荐
.to("rabbitmq:sino.nannan?routingKey=sino.key&skipExchangeDeclare=true&skipQueueDeclare=true").log("${body}").end();按queueName发送消息:  推荐
.to("rabbitmq:sino.nannan?queue=sino.queueName&skipExchangeDeclare=true&skipQueueDeclare=true").log("${body}").end();按交换器名称和类型 发送消息: (不常用, 用在fanout)
.to("rabbitmq:sino.nan?exchangeType=fanout&skipExchangeDeclare=true&skipQueueDeclare=true").log("${body}").end();camel按queueName接收消息:  推荐
from("rabbitmq:sino.nannan?exchangeType=topic&autoDelete=false&queue=sino.queueName&skipQueueDeclare=true")camel整合rabbitmq引入依赖 <dependency><groupId>org.apache.camel</groupId><artifactId>camel-spring-boot-starter</artifactId><version>2.22.2</version></dependency><!-- 3.20.5 是camel-rabbitmq最新的jar --><dependency><groupId>org.apache.camel</groupId><artifactId>camel-rabbitmq</artifactId><version>2.22.2</version></dependency>

0. add virtual host

1. Connections

2. add exchange (需选择virtual host)

RabbitMQ 提供了四种主要的交换机类型(Exchange Types),用于将消息路由到适当的队列(Queues)。每种交换机类型都有其特定的行为和用途:Direct Exchange:
行为: 通过完全匹配路由键 (Routing Key) 将消息发送到与其绑定的队列。
用法: 当你希望消息被准确地路由到一个指定的队列时使用。
示例: 如果消息的路由键是 "info" 并且队列绑定的路由键也是 "info",则该消息会被路由到该队列。Fanout Exchange:
行为: 将消息广播到所有绑定到该交换机的队列,不考虑路由键。
用法: 当你希望消息复制并发送到所有绑定队列时使用,例如广播消息。
示例: 一个 Fanout 交换机可以用来将同一消息发送到多个服务或日志系统。Topic Exchange:
行为: 根据模式匹配路由键,将消息发送到符合模式的队列。模式可以包含通配符,例如 * 表示一个单词,# 表示零个或多个单词。
用法: 当你需要基于模式或主题进行复杂的路由时使用。
示例: 路由键 "user.*" 可以匹配 "user.info",而 "user.#" 可以匹配 "user.info" 和 "user.info.details"。Headers Exchange:
行为: 根据消息的属性(头部信息)进行路由,而不是依赖于路由键。头部信息可以包括任意键值对。
用法: 当你需要基于多个属性进行复杂路由时使用。
示例: 你可以配置交换机根据头部信息如 {"x-match": "all", "format": "pdf", "type": "report"} 进行路由,只有消息头部包含这些键值对时才会被路由到绑定的队列。
这四种交换机类型提供了不同的消息路由机制,使得 RabbitMQ 能够灵活地适应各种消息分发需求。选择合适的交换机类型可以有效地优化消息传递的效率和准确性

3. add a new queue (需选择virtual host)

 4. 对新建的queue  (交换器 和 rooting_key 绑定)

发布/订阅模式(Publish/Subscribe)是 RabbitMQ 中常见的一种消息传递模式,用于将消息广播给多个消费者。在这种模式中,消息发送者(发布者)将消息发送到一个交换机(exchange),交换机将消息广播到所有与之绑定的队列,然后消费者(订阅者)可以从这些队列中接收消息

根据路由键 和mq服务所有的路由键比对 附和  消息就到相匹配的队列里
如果多个队列的rooting_key都与某个消息的路由键匹配,那么这个消息就会被复制并发送到所有匹配的队列中
 

5.  * 和 # 在 RabbitMQ 中用作路由键的通配符

在 RabbitMQ 中,"routing key"(路由键)是用于消息路由的关键部分。当消息发布到交换机(exchange)时,交换机会根据消息的路由键将消息路由到相应的队列(或者其他交换机,取决于交换机类型)。符号 "*" 和 "#" 在 RabbitMQ 中有特定的意义,它们被用作路由键的通配符:"*"(星号):在路由键中表示一个单词(单词由点 "." 分隔)的通配符。
例如,路由键 *.info 匹配 app.info、api.info,但不匹配 app.error。
"#"(井号):在路由键中表示零个或多个单词的通配符。
例如,路由键 app.# 匹配 app.error、app.info、app.system.error 等。
这些通配符可以帮助在消息路由时进行灵活的匹配,使得你可以定义复杂的路由规则,而不需要为每个可能的情况都单独定义一个绑定。举例来说,如果你有一个交换机,它绑定了一个队列,绑定键为 *.error,那么这个队列将接收到所有以 .error 结尾的路由键的消息,例如 app.error、db.error 等。因此,"*" 和 "#" 是 RabbitMQ 中用来实现灵活消息路由的重要工具。

6. Channel的理解

 虽然你不能直接在管理界面上创建或关闭Channel,但你可以通过管理界面创建和管理队列、交换器、绑定等,这些都是通过Channel在后台执行的

7. rabbitmq 发布订阅模式 是指 fanout交换机吗? 是

topic交换机支持复杂的路由规则。

@Override
public void configure() {from("timer://foo?period=10000").setBody().constant("22222").to("direct:sendToFanout");from("direct:sendToFanout").to("rabbitmq:sino.nan?exchangeType=fanout&autoDelete=false&skipQueueDeclare=true").log("csx data:" + "${body}");}将队列名称分别为 nan1  nan2的队列与fanout类型的交换机sino.nan 绑定.一个项目里对nan1  nan2 同时监听消费就会报错,
Caused by: org.apache.camel.FailedToStartRouteException: Failed to start route route2 because of Multiple consumers for the same endpoint is not allowed: rabbitmq://sino.nan?autoDelete=false&exchangeType=fanout&queue=nan1&skipQueueDeclare=true@Override
public void configure() {from("rabbitmq:sino.nan?exchangeType=fanout&autoDelete=false&queue=nan1&skipQueueDeclare=true")// 这里可以添加更多异常处理逻辑,如重试、路由到错误队列等.log("推送到soa1: ${body}").end();}@Override
public void configure() {from("rabbitmq:sino.nan?exchangeType=fanout&autoDelete=false&queue=nan2&skipQueueDeclare=true")// 这里可以添加更多异常处理逻辑,如重试、路由到错误队列等.log("推送到soa1: ${body}").end();}

是的,RabbitMQ中的发布订阅模式通常指的是使用fanout类型的交换机。在发布订阅模式下,消息生产者发送消息到fanout交换机,交换机并不处理任何路由键(routing key),而是简单地将消息广播到所有与之绑定的队列上。每个绑定到fanout交换机的队列都会收到消息的一个拷贝,进而可以供给绑定到这些队列的消费者进行处理。

是的,RabbitMQ的发布订阅模式通常指的是使用fanout交换机。这种交换机类型将消息广播到所有绑定到该交换机的队列,而不考虑路由键。这使得fanout交换机非常适合实现发布订阅模式。


direct (发布与订阅完全匹配)
fanout 广播 (没有路由键RouteKey的概念)
topic 主题,规则匹配direct交换器相对来说比较简单,匹配规则为:如果路由键匹配,消息就被投送到相关的队列
fanout交换器中没有路由键的概念,他会把消息发送到所有绑定在此交换器上面的队列中。
topic交换器你采用模糊匹配路由键的原则进行转发消息到队列中交换器和队列的关系:
交换器是通过 路由键 和 队列 绑定在一起的, 如果消息拥有的 路由键 跟队列 和 交换器 的路由建匹配, 那么消息就会被路由到该绑定的队列中也就是说, 消息首先会经过交换器, 接下来交换器在通过路由键值 匹配分发消息到具体的队列中。路由键 可以理解为 匹配的规则总结
fanout交换机:它将消息广播到所有绑定到它的队列,不考虑路由键。
发布订阅模式:通过使用fanout交换机,可以实现一个生产者将消息发送给多个消费者的模式,每个消费者都有自己的队列来接收消息。

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

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

相关文章

Python 挖坑式填充Excel模板内容(包括页眉/SheetName/logo)

纵览 Python处理Excel的方式--解压缩方式1、导包2、对模板文件进行解压缩3、对解压缩后文件层级进行介绍4、准备需要载入的数据5、模板挖坑6、运行替换代码7、压缩文件8、生成文件9、完成代码10、可能遇到的问题 结语 Python处理Excel的方式–解压缩方式 在处理Excel中过程中&…

《人人都是产品经理》:项目的坎坷一生

《人人都是产品经理》&#xff1a;项目的坎坷一生 产品VS项目产品经理和项目经理 一切项目从kick off 开始工作量预估Kick Off的大致也就15分钟 写文档咯UML图用例文档UCdemo也得做 需求活在项目中bug等级有多高bug流转过程 以终为始 产品VS项目 项目定义&#xff1a;是只会进…

怎么压缩pdf文件大小,如何压缩pdf文件大小

pdf文件怎么压缩&#xff1f;在当下这个信息爆炸的时代&#xff0c;无论是在工作场所还是校园中&#xff0c;我们经常会面临需要处理大文件的情况&#xff0c;而PDF格式作为一种保留文档结构和布局完整性的理想选择&#xff0c;有时候pdf文件太大&#xff0c;因此&#xff0c;对…

typec密封胶防水用什么胶好?

typec密封胶防水用什么胶好&#xff1f; 对于Type-C连接器的防水密封&#xff0c;行业内普遍推荐使用单组份环氧型热固化胶。这种胶水具有以下优点&#xff0c;使其成为Type-C防水密封的理想选择&#xff1a; 粘稠度易于调整&#xff1a;这有助于胶水在点胶过程中更好地渗透到T…

2024年二级建造师机电工程专业考试题库分享。

1.调查表法通常与&#xff08;&#xff09;结合使用&#xff0c;以便更快地发现问题原因。 A.经验法 B.分层法 C.样本调查法 D.对比分析法 答案&#xff1a;B 解析&#xff1a;题干内容提示调查表法往往会与分层法结合起来应用&#xff0c;故B选项正确。 2.在质量统计分…

压缩图片png格式该怎么操作?试试下面这3个图片压缩工具吧

png是经常用于储存图片的一种格式&#xff0c;随着现在图片在日常工作和生活中的广泛使用&#xff0c;在很多的使用场景中都有应用。png的图片质量高而且支持无损压缩&#xff0c;在缩小图片的时候不会因为压缩而影响图片的清晰度&#xff0c;更适合在网上的存储、分享或者传输…

论文阅读MVBench: A Comprehensive Multi-modal Video Understanding Benchmark

摘要(Abstract)&#xff1a; 论文介绍了MVBench&#xff0c;这是一个全新的多模态视频理解基准测试&#xff0c;旨在评估多模态大型语言模型&#xff08;MLLMs&#xff09;在视频理解方面的能力。 目前许多基准测试主要集中在静态图像任务的空间理解上&#xff0c;而忽视了动…

c++进程间通信--zeromq

ZeroMQ&#xff08;也写作 MQ、0MQ 或 zmq&#xff09;是一个高性能的异步消息队列库&#xff0c;提供了一种灵活的方式来实现进程间通信&#xff08;IPC&#xff09;以及网络通信。在C中使用ZeroMQ进行进程间通信非常直观和高效。zmq的通信模式如下&#xff1a; 下面先说明请求…

第 11 课:组件介绍与自定义开发

本讲主要介绍了隐语的组件标准、已有的组件能力以及进一步的自定义开发流程。经过本讲的学习&#xff0c;可以为将隐语集成到任意调度系统&#xff0c;基于Kusica/SecretPad进行二次开发&#xff0c;以及参与隐语开放标准共建建立基础。 一、隐语开放标准 隐语提出的适用于隐私…

证件照制作工具有哪些?这6个帮你自制证件照

许多人可能认为&#xff0c;制作一张符合标准要求的证件照&#xff0c;必须亲自前往照相馆。 然而&#xff0c;事实上&#xff0c;我们完全可以使用手机或电脑上的证件照制作app&#xff0c;自己轻松完成证件照的制作。无论是更换背景颜色&#xff0c;还是调整照片尺寸&#x…

【ARM】Ulink不同的系列对于芯片的支持和可以支持keil软件

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 了解不同版本的ULINK可以支持的芯片架构&#xff0c;和ULINK可以和哪个系列的keil软件进行在线调试 2、 问题场景 用于了解不同ULINK仿真器对于芯片的支持是不一样的&#xff0c;并不是ULINK可以支持所有的keil软件…

2024系统分析师考试总结

考试缘由 我自己在毕业不久就考过了中级的软件设计师&#xff0c;这几年换到外企后事情不多&#xff0c;今年初定计划的时候就想着不如考个系统分析师吧。为什么选这个类别呢&#xff1f;按道理我主做程序开发&#xff0c;如果去考系统架构师通过率可能会大一些&#xff0c;但…

【Uniapp微信小程序】图片左右分割/分割线切割图片/图片批量分割线切割

特别说明:本文章因业务组件功能,不完全开放/暂vip可见,有需要者留言找博主! ps:注意!!本效果为图片分割切割!!不是文档切割!!图片仅供参考! 效果图 父组件 / 上传图片页面(index) 写一个上传按钮即可,事件方法: uni.chooseMessageFile({extension: [".j…

Unity | Shader基础知识(第十六集:简单的全息扫描效果)

目录 一、前言 二、准备模型 三、 场景准备 四、代码准备 五、透明度设置 六、补充介绍 1.Pass语法介绍 2.ColorMask 七、作者的碎碎念 一、前言 这节课的内容是接着弧形边缘光的效果之后做的。 Unity | Shader基础知识(第十四集&#xff1a;简单效果练习)_unity shade…

idea或vscode支持vue语法,ts可解析*.vue

一、ide不能解析vue文件 刚开始导入时&#xff0c;在vscode中的vue文件中内容都是灰色的 ide不能解析vue解决方法&#xff1a; 1.idea或webstorm安装vue.js插件 2.在vscode中 vue2.0的项目安装vetur插件vue3.0及以上的项目安装Vue-official插件&#xff08;之前是Volar&…

PC XMind v24 解锁版安装教程 (全球领先的商业思维导图软件)

前言 XMind 是一款专业的全球领先的商业思维导图软件&#xff0c;在国内使用广泛&#xff0c;拥有强大的功能、包括思维管理、商务演示、与办公软件协同工作等功能。它采用全球先进的Eclipse RCP软件架构&#xff0c;是集思维导图与头脑风暴于一体的可视化思考工具&#xff0c…

mysql GROUP_CONCAT分组连接

文章目录 GROUP_CONCAT 分组连接GROUP_CANCAT 的使用分班级列出名单分班级列出名单并包含显示性别组合IFNULL组合IF组合case when GROUP_CONCAT 分组连接 准备的数据示例 CREATE TABLE students (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) DEFAULT NULL,classNa…

Rust监控可观测性

可观测性 在监控章节的引言中&#xff0c;我们提到了老板、前端、后端眼中的监控是各不相同的&#xff0c;那么有没有办法将监控模型进行抽象、统一呢&#xff1f; 来简单分析一下&#xff1a; 业务指标实时展示&#xff0c;这是一个指标型的数据( metric )手机 APP 上传的数…

Android简介-历史、API等级与体系结构

1. Android简介 Android是一种基于Linux内核的自由及开放源代码的操作系统。最初是由安迪鲁宾(Andy Rubin)开发的一款相机操作系统。2005年8月被Google收购。2007年11月&#xff0c;Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。…

博途(TIA Portal)自动化工程软件下载安装,TIA Portal V18软件安装包获取

博途&#xff08;TIA Portal&#xff09;不仅仅是一款自动化工程软件&#xff0c;它更是西门子自动化领域的璀璨明珠。 它能够将西门子的所有自动化产品无缝集成在一起&#xff0c;无论是PLC、人机界面&#xff0c;还是伺服系统、马达、变频器、网络组件等&#xff0c;博途都能…