当前位置: 首页 > news >正文

RabbitMQ框架及应用场景

简介

RabbitMQ是一个使用Erlang,基于AMQP协议的MQ组件。

AMQP全称为 Advanced Message Queuing Protocol高级消息队列协议****),是一个面向消息的中间件传输协议,用于在应用程序之间进行异步消息通信。

AMQP协议定义了多种角色和服务,包括生产者、消费者、交换器、队列等。其中生产者负责生成消息,消费者负责接收和处理消息,交换器则负责将消息路由到队列中。

AMQP协议的消息传输基于消息队列,支持消息的确认、持久化、事务等功能,同时支持不同的消息传输模式,如点对点(point-to-point)和发布-订阅(publish-subscribe)模式。

整体架构

  • Virtual host: 虚拟主机,可以进行数据隔离

  • Publisher: 消息发送者

  • Consumer:消息消费者

  • queue:队列,存放未消费的消息

  • exchange:交换机,路由消息,将消息发送到相应的队列

暂时无法在飞书文档外展示此内容

交换机的四种类型

交换机有四种类型,分别是:Direct、Fanout、Topic和Headers

  • direct: 直接匹配模式,将消息发送到与路由键完全匹配的队列中。按照消息的路由键(routing key)完全匹配来投递消息。direct模式可以使用RabbitMQ自带的默认交换机,所以不需要将交换机进行任何绑定操作

  • topic: 使用通配符进行模糊匹配,消息会带有一个路由键(routing key),而队列绑定到交换机上时,也可以指定主题,而且还能使用一定的正则形式,只要主题匹配上消息的路由键,该消息就会发送至该队列 符号“#”匹配一个或多个词 eg:" log.# "能够匹配到‘ log.info.oa ’ 符号“*” 匹配不多不少一个词 eg:“ log.* ”只能匹配到“log.erro”

  • headers: 根据消息头的键值对匹配,按照消息头(header)匹配来投递消息。当消息头与某个绑定的headers完全匹配时,才会将消息发送到该队列中。

  • fanout : 将接收到的所有消息广播到它知道的所有队列中,如果routing_key 有指定也不会生效

生产者可靠性

  • 生产者重连

  • 生产者确认

MQ可靠性

  • MQ数据持久化,queue durable,消息会写入磁盘进行持久化

  • 惰性队列 lazy queue,惰性队列会将接收到的消息直接存入文件系统

消费者可靠性

  • 消费者确认

  • 失败重试

  • 业务幂等性,先查后改存在并发问题,可以使用sql语句根据条件update实现幂等性

死信交换机

消息被拒绝,并且设置不能重发;或者消息过期还无人消费;或者队列满了,早期的消息;就会成为死信。

如果队列 通过dead-letter-exchange 属性指定了一个交换机,那么该队列中的死信就会投递到这个交换机中,

这个交换机就被称为死信交换机(Dead Letter Exchange,简称DLX)

应用场景

死信交换机

在订单取消方面可以发挥作用。以下是一个使用死信交换机实现订单取消的示例:

定义一个延迟队列,如果这个包含死信的队列配置了dead-letter-exchange属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为死信交换机(Dead Letter Exchange,检查DLX)。

如果这个死信交换机也绑定了一个队列,则消息最终会进入这个存放死信的队列。然后消费者监听死信队列,取消订单。

另外,队列将死信投递给死信交换机时,必须知道两个信息:

  • 死信交换机名称

  • 死信交换机与死信队列绑定的RoutingKey

这样才能确保投递的消息能到达死信交换机,并且正确的路由到死信队列。

  1. 配置****消息队列

    1. 开启手动ack,以便消费者在处理消息后可以进行应答。

    2. 定义一个延迟队列,例如order.delay.queue,用于存放超时的订单信息。

    3. 创建一个死信交换机,例如order.delay.exchange,用于接收来自延迟队列的消息。

    4. 配置延迟队列与死信交换机之间的绑定,使用x-dead-letter-exchangex-dead-letter-routing-key参数来指定死信消息的转发规则。

  2. 生产者

    1. 在订单生成后,将订单信息发送到延迟队列,并设置消息的TTL(生存时间),例如10分钟。

    2. 如果需要,可以设置消息的优先级,以便于区分不同紧急程度的订单。

  3. 消费者

    1. 监听死信队列,并从中获取超时的订单信息。

    2. 对订单信息进行处理,例如取消订单、更新订单状态等。

    3. 手动ack消息,告知消息服务器消息已被处理。

  4. 测试

    1. 发送延迟消息进行测试,并检查订单状态的变化。

这样就可以实现一个简单的基于死信交换机的订单取消系统。当订单超时时,消息会被转发到死信交换机,消费者可以从中获取并处理这些消息,从而实现订单的取消。这种方式相较于传统的定时扫表方式,更加高效和灵活

http://www.jsqmd.com/news/21493/

相关文章:

  • 【开题答辩全过程】以 “辛巴克餐饮”小程序为例,具备答辩的问题和答案
  • 2025年一体化雨水提升泵站厂家权威推荐榜单:污水提升泵站/一体化污水泵站/一体化雨水泵站源头厂家精选
  • STM32软件I2C读写AT24C64 - 指南
  • bcc
  • 手写ibatis
  • 国产IPD项目管理软件推荐|别再靠 Excel 推 IPD 了!帮你把IPD流程从“纸上”搬进系统
  • 【源码解读之 Mybatis】【核心篇】--第7篇:ParameterHandler参数处理机制
  • [linux] 文件夹可写权限的关闭和打开
  • 2025年教室护眼灯厂家权威推荐榜单:led教室灯/幼儿园教室灯/教室照明灯具源头厂家精选
  • 2025年自动定量灌装机厂家权威推荐榜单:称重灌装机/膏状灌装机/瓶灌装机源头厂家精选
  • 厨房电子秤芯片方案:SIC8833
  • 在MCUXpresso IDE中建立使用静态库的工程 - 指南
  • 从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
  • 深入理解Java线程
  • Launcher 桌面源码笔记一(3D车模桌面)
  • 2025 年最新推荐!软件验收测试公司最新排行榜,揭秘具备 CMA/CNAS 资质的靠谱品牌可靠/权威/知名的软件验收测试公司推荐
  • Ollama大模型推理场景下3090和4090性能实测
  • OSI七层网络参考模型(Leo)
  • 2025 年最新推荐河道护栏源头厂家口碑榜,聚焦全流程服务与高性价比之选铝合金/绳索/不锈钢河道护栏公司推荐
  • ABP vNext 基础四层
  • 2025 年管道修补器源头厂家最新推荐排行榜:揭秘行业内具备全流程管控能力的靠谱厂商及优质产品选型指南加长/铸铁/弯头/卡箍式管道修补器公司推荐
  • 实用指南:YOLO系列——实时屏幕检测
  • 信号(Signal)、信号量(Semaphore)
  • 在 macOS 中遇到 brew 命令不存在的问题
  • 在线聊天室
  • 2025 年亚克力大型鱼缸厂家联系方式推荐:江苏金穗的全产业链服务与定制化技术优势解析
  • 2025 年海洋水族馆厂家联系方式推荐:江苏金穗亚克力定制服务与工程案例,泳池 / 鱼缸项目解决方案
  • 例3.3】三个数 ------信息奥赛高级题库
  • 详细介绍:Go 和云原生 的现状和发展前景
  • Socket 编程 TCP(准备阶段) - 指南