SlimMessageBus对接RabbitMQ完全指南:队列、死信与重试错误处理实战
SlimMessageBus对接RabbitMQ完全指南队列、死信与重试错误处理实战【免费下载链接】SlimMessageBusLightweight message bus interface for .NET (pub/sub and request-response) with transport plugins for popular message brokers.项目地址: https://gitcode.com/gh_mirrors/sl/SlimMessageBusSlimMessageBus是一个轻量级的 .NET 消息总线message bus支持发布/订阅pub/sub和请求/响应request-response两种通信模式。搭配 RabbitMQ 传输插件后你可以用统一的 API 对接 RabbitMQ 的 Exchange、Queue 和 Binding并轻松实现死信队列DLX与重试错误处理是 .NET 微服务架构中对接 RabbitMQ 的简单可靠方案。 5分钟搭建 RabbitMQ 环境官方仓库自带 Docker Compose 编排文件其中包含带管理界面的 RabbitMQ 服务端口 5672管理界面 15672默认账号 guest/guestrabbitmq: container_name: slim.rabbitmq image: rabbitmq:4.2.3-management-alpine ports: - 5672:5672 - 15672:15672参考文件src/Infrastructure/docker-compose.yml在 NuGet 中安装SlimMessageBus.Host.RabbitMQ和SlimMessageBus.Host.Serialization.Json两个包即可开始。对接核心一行配置连接 RabbitMQRabbitMQ 模型围绕三个概念Exchange交换机生产者发消息的入口、Queue队列消费者的收件箱、Binding绑定规则决定消息如何路由到队列。SlimMessageBus 通过WithProviderRabbitMQ配置连接并自动完成拓扑交换、队列、绑定的创建无需手动写 AMQP 代码services.AddSlimMessageBus(mbb { mbb.WithProviderRabbitMQ(cfg cfg.ConnectionString configuration[RabbitMQ:ConnectionString]); mbb.ProduceOrderEvent(x x.Exchange(orders, exchangeType: ExchangeType.Fanout)); mbb.ConsumeOrderEvent(x x .Queue(orders-queue) .ExchangeBinding(orders) .DeadLetterExchange(orders-dlq, exchangeType: ExchangeType.Direct) .WithConsumerOrderCreatedConsumer()); mbb.AddJsonSerializer(); }); 关键点SlimMessageBus 会自动声明交换机、队列和绑定——生产者声明的 Exchange、消费者声明的 Queue 及其 Binding都会被自动在 RabbitMQ 中创建。SlimMessageBus RabbitMQ 传输中多种消息类型共用同一交换机的示意图队列与路由键支持通配符匹配Topic 类型交换机下SlimMessageBus 完整支持 RabbitMQ 的通配符路由键模式匹配规则示例*恰好一个片段regions.na.cities.*匹配regions.na.cities.toronto#零个或多个片段audit.events.#匹配audit.events.orders.placed#单独使用匹配所有路由键全量订阅mbb.ConsumeRegionEvent(x x .Queue(na-cities-queue) .ExchangeBinding(regions, routingKey: regions.na.cities.*)); 性能优化内部的路由键匹配器优先使用精确匹配仅在无精确命中时才做通配符模式匹配并对模式做了缓存。详见 src/SlimMessageBus.Host.RabbitMQ/Services/RoutingKeyMatcherService.cs。若消息的路由键未匹配到任何消费者可通过MessageUnrecognizedRoutingKeyHandler自定义行为默认 Ack 丢弃也可改为 Nack 送入死信队列、或 Requeue 稍后重试适合滚动发布场景。死信队列DLX失败消息不再丢失消费者处理失败时SlimMessageBus 默认会向 RabbitMQ 发送Nack消息将被路由到队列上配置的死信交换机或丢弃。推荐做法是为消费队列配置 DLXmbb.ConsumePingMessage(x x .Queue(subscriber, autoDelete: false) .ExchangeBinding(ping) // 队列将引用死信交换机指定 exchangeType 后 DLX 也会被自动创建 .DeadLetterExchange(subscriber-dlq, exchangeType: ExchangeType.Direct) .WithConsumerPingConsumer());也可以在总线级别为所有死信交换机设置默认值如统一使用 Direct 类型mbb.WithProviderRabbitMQ(cfg cfg.UseDeadLetterExchangeDefaults(durable: false, autoDelete: false, exchangeType: ExchangeType.Direct, routingKey: string.Empty));这样失败消息会进入subscriber-dlq对应的队列方便后续排查与补偿处理。重试与错误处理三种确认模式 自定义错误处理器确认模式决定至少一次还是至多一次SlimMessageBus 提供三种 Ack 确认模式默认是最安全的ConfirmAfterMessageProcessingWhenNoManualConfirmMade模式行为投递保证ConfirmAfterMessageProcessingWhenNoManualConfirmMade默认处理成功 Ack出错 Nack支持手动干预至少一次at-least-onceAckAutomaticByRabbit由 RabbitMQ 协议层自动 Ack至多一次at-most-onceAckMessageBeforeProcessing处理前立即 Ack至多一次吞吐量略低定义见 src/SlimMessageBus.Host.RabbitMQ/Config/RabbitMqMessageAcknowledgementMode.cs自定义错误处理器实现重试 N 次后进入死信实现IRabbitMqConsumerErrorHandlerT接口即可完全掌控失败消息的命运——例如瞬时故障则重入队列Requeue持久故障则 Nack 进 DLQpublic class CustomRabbitMqConsumerErrorHandlerT : IRabbitMqConsumerErrorHandlerT { public TaskProcessResult OnHandleError(T message, IConsumerContext ctx, Exception exception, int attempts) { if (exception is TransientException) return Task.FromResultProcessResult(RabbitMqProcessResult.Requeue); // 重试 return Task.FromResultProcessResult(ProcessResult.Failure); // 送死信 } } // 注册到 DI对任意消息类型生效 services.AddTransient(typeof(IRabbitMqConsumerErrorHandler), typeof(CustomRabbitMqConsumerErrorHandler)); 源码src/SlimMessageBus.Host.RabbitMQ/Consumers/IRabbitMqConsumerErrorHandler.cs。消费者内部还能通过ConsumerContext手动调用Ack()/Nack()精确控制单条消息。生产环境可靠性发布确认与断线自动恢复Publisher Confirms可选调用cfg.UsePublisherConfirms()开启发布确认Broker 拒绝NACK消息时会抛异常适合金融、订单等关键场景默认关闭以保吞吐也支持按生产者单独开启/退出。断线自动恢复RabbitMqChannelManager会无限次后台重连默认每 5 秒连接恢复后自动重建通道、重建拓扑并让所有消费者重新注册重启 RabbitMQ 容器也无需人工干预。消费者并发通过cfg.ConnectionFactory.ConsumerDispatchConcurrency调高单实例并发需要保证顺序时保持为 1。总结需求SlimMessageBus 方案自动创建 Exchange/Queue/Binding生产者/消费者声明时自动拓扑供给通配符路由键*/#模式 内置路由键匹配缓存失败消息兜底.DeadLetterExchange(...)一行配置 DLX重试逻辑自定义IRabbitMqConsumerErrorHandlerT Requeue投递保证默认 at-least-once可切换 at-most-once断线恢复自动重连 消费者自动重新注册延伸阅读docs/provider_rabbitmq.md 包含请求/响应、发布确认超时、多消费者同队列等完整内容更多示例可参考 src/Tests/SlimMessageBus.Host.RabbitMQ.Test/ 下的集成测试。【免费下载链接】SlimMessageBusLightweight message bus interface for .NET (pub/sub and request-response) with transport plugins for popular message brokers.项目地址: https://gitcode.com/gh_mirrors/sl/SlimMessageBus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Jelu安全机制揭秘:5种认证方式与API Token作用域完整解析

Jelu安全机制揭秘:5种认证方式与API Token作用域完整解析

Jelu安全机制揭秘:5种认证方式与API Token作用域完整解析 【免费下载链接】jelu Self hosted read and to-read list book tracker 项目地址: https://gitcode.com/gh_mirrors/je/jelu Jelu 是一款自托管的读书与待读清单追踪工具(self-hosted bo…

2026/8/25 9:19:08 阅读更多 →
2026招聘革命:传统渠道失效与人才匹配新策略

2026招聘革命:传统渠道失效与人才匹配新策略

1. 招聘效率困局:当传统渠道集体失效2026年的招聘市场正在经历一场静悄悄的革命。我最近为三家不同规模的企业做人才诊断时发现,HR部门普遍反映一个现象:传统招聘渠道的简历转化率从2021年的平均5.8%骤降至2023年的1.2%,预计到202…

2026/8/25 9:19:08 阅读更多 →
pySMT UNSAT Core实战:像调试Bug一样解决爱因斯坦50问(含完整代码)

pySMT UNSAT Core实战:像调试Bug一样解决爱因斯坦50问(含完整代码)

pySMT UNSAT Core实战:像调试Bug一样解决爱因斯坦50问(含完整代码) 【免费下载链接】pysmt pySMT: A library for SMT formulae manipulation and solving 项目地址: https://gitcode.com/gh_mirrors/py/pysmt pySMT 是一个 Python 库…

2026/8/25 9:18:07 阅读更多 →

最新新闻

自动化测试面试10大高频问题解析与应对策略

自动化测试面试10大高频问题解析与应对策略

1. 自动化测试面试高频问题解析作为一名在测试领域摸爬滚打多年的老兵,我深知自动化测试岗位面试的痛点。很多优秀的候选人因为不熟悉面试套路而错失机会,今天我就来拆解那些面试官最爱问的10大高频问题,帮你轻松应对技术面。自动化测试岗位的…

2026/8/25 10:00:26 阅读更多 →
Morpeh 2024版本迁移指南:Breaking变更与最佳实践一次讲清

Morpeh 2024版本迁移指南:Breaking变更与最佳实践一次讲清

Morpeh 2024版本迁移指南:Breaking变更与最佳实践一次讲清 【免费下载链接】morpeh 🎲 ECS Framework for Unity Game Engine and .Net Platform 项目地址: https://gitcode.com/gh_mirrors/mo/morpeh Morpeh 是一款面向 Unity 游戏引擎与 .NET 平…

2026/8/25 10:00:26 阅读更多 →
OCaml中Resolver参数的美妙实现:详解ocaml-graphql-server的diff-list GADT设计

OCaml中Resolver参数的美妙实现:详解ocaml-graphql-server的diff-list GADT设计

OCaml中Resolver参数的美妙实现:详解ocaml-graphql-server的diff-list GADT设计 【免费下载链接】ocaml-graphql-server GraphQL servers in OCaml 项目地址: https://gitcode.com/gh_mirrors/oc/ocaml-graphql-server ocaml-graphql-server 是一个用 OCaml …

2026/8/25 10:00:26 阅读更多 →
FFmpeg合并.ts(或.m3u8)文件和字幕文件为新的视频文件

FFmpeg合并.ts(或.m3u8)文件和字幕文件为新的视频文件

目录 1 下载安装适合您操作系统的FFmpeg版本2 将所有的.ts文件放在一个文件夹中,合并.ts文件2.1 方法一,使用FFmpeg的concat协议来合并.ts文件2.2 方法二,直接使用concat协议(适用于少量文件) 3 使用FFmpeg将合并后的.…

2026/8/25 10:00:26 阅读更多 →
Ardent测试体系解析:用PHPUnit数据驱动构建高覆盖测试的完整清单

Ardent测试体系解析:用PHPUnit数据驱动构建高覆盖测试的完整清单

Ardent测试体系解析:用PHPUnit数据驱动构建高覆盖测试的完整清单 【免费下载链接】Ardent A Collections library for PHP. 项目地址: https://gitcode.com/gh_mirrors/ard/Ardent Ardent 是一个面向 PHP 的对象导向编程的集合库,提供 Set、Map、…

2026/8/25 10:00:26 阅读更多 →
AI时代招聘困境与智能化解决方案

AI时代招聘困境与智能化解决方案

1. 项目概述:当招聘遇上AI革命去年帮一家科技公司做招聘体系升级时,遇到个典型场景:HR负责人拿着算法岗位的简历问我:"这位候选人在顶级会议发了3篇论文,但学历只是普通一本,要不要约面试?…

2026/8/25 9:59:20 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →