开源一款功能强大的 .NET 消息队列通讯模型框架 Maomi.MQ

💡 原文中文,约39200字,阅读约需94分钟。
📝

内容提要

本文介绍了Maomi.MQ.RabbitMQ框架的消费者功能和可观测性功能的使用方法。消费者可以消费失败的消息,并执行相应的任务。可观测性功能可以通过OpenTelemetry收集链路追踪信息,并通过Jaeger、Skywalking等组件进行读取。

🔎

延伸解读

连接池与独占模式:高吞吐场景的优化选择

Maomi.MQ.RabbitMQ 内部实现了连接池以复用 RabbitMQ.Client.IConnection 对象,默认最大连接数为 Environment.ProcessorCount * 2。对于需要短时间内大批量发布消息的场景,可以使用独占模式(CreateSingle)在一段时间内独占一个连接对象,避免频繁获取和归还连接的开销,从而提升吞吐量。但需注意使用 using 或手动 Dispose 以确保连接归还。

重试与补偿机制:平衡可靠性与资源消耗

框架默认重试五次,间隔按指数增长(2、4、8、16、32秒),使用 Polly 实现。重试失败后执行 FallbackAsync 补偿,返回 true 表示补偿成功,消息被确认;返回 false 则根据 RetryFaildRequeue 决定是否放回队列。若绑定死信队列且 RetryFaildRequeue 为 false,消息会进入死信队列。需注意,若 RetryFaildRequeue 为 true,死信队列不会收到消息。

分组消费与 Qos 配置:资源与顺序的权衡

通过 Group 属性可将多个消费者或事件合并到同一个 IConnection 中,降低资源消耗,适用于消费频率不高的场景。但分组内 Qos 会取平均值,因此建议分组内 Qos 一致。对于需要严格顺序消费的队列,应设置 Qos=1 且不分组,以独占资源保证顺序;若无需顺序,可提高 Qos 以并发消费,提升吞吐量。

可观测性集成:链路追踪与故障诊断

框架通过 OpenTelemetry 支持分布式可观测性,可集成 Jaeger、Skywalking 等。需引入 Maomi.MQ.Instrumentation 包并配置 AddMaomiMQInstrumentation。发布和消费属于兄弟 trace,需通过 Tags 查询关联的 trace,格式为 event.id=xxx。注意,若自行使用 ConnectionPool 发布消息,可能导致可观测性信息缺失。

❓

Q&A

Maomi.MQ.RabbitMQ框架的主要功能是什么?

Maomi.MQ.RabbitMQ框架简化了消息发布和消费的代码,提供高性能消费、事件编排、分布式可观测性等功能。

如何实现消费者功能?

消费者需要实现IConsumer<TEvent>接口,并使用[Consumer]特性配置消费者属性。

Maomi.MQ如何处理消费失败的消息?

框架支持重试机制,默认重试五次,重试间隔时间逐渐增加,若仍失败可选择将消息放回队列或进入死信队列。

可观测性功能是如何实现的?

可观测性功能通过OpenTelemetry收集链路追踪信息,并支持与Jaeger、Skywalking等组件集成。

如何配置消息的过期时间?

可以通过设置消息的BasicProperties中的Expiration属性来配置消息的过期时间。

Maomi.MQ框架支持哪些消息队列功能?

框架支持消息过期、死信队列、重试机制、事务和发送方确认模式等功能。

🏷️

标签

➡️

继续阅读