开源一款功能强大的 .NET 消息队列通讯模型框架 Maomi.MQ
内容提要
本文介绍了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框架支持哪些消息队列功能?
框架支持消息过期、死信队列、重试机制、事务和发送方确认模式等功能。