【.NET 6】RabbitMQ延迟消费指南( 四 )

相比于DLXConsumer , DMConsumer里 , 我们不需要额外的队列 , 只需要创建orders.notification_dm交换机即可 , 同时直接将交换机绑定到orders.notification交换机 , EasyNetQ里使用AsDelayedExchange指示该交换机为延迟交换机 , 使用WithDelay设置消息延迟时间通过查看EasyNetQ源码 https://github.com/EasyNetQ/EasyNetQ/blob/master/Source/EasyNetQ/DelayedExchangeExtensions.cs , 它封装延迟交换机的设置

【.NET 6】RabbitMQ延迟消费指南

文章插图
启动Producer再生成一些数据 , 然后运行DLXConsumer看效果 , 和DLXConsumer一样
【.NET 6】RabbitMQ延迟消费指南

文章插图
打开RabbitMQ后台 , 可以看到多了一个类型为x-delayed-messageorders.notification_dm交换机 , 带有DMArgs两个标签
【.NET 6】RabbitMQ延迟消费指南

文章插图
【【.NET 6】RabbitMQ延迟消费指南】进入交换机 , 可以看到里面已经存储了13条消息 。
【.NET 6】RabbitMQ延迟消费指南

文章插图
总结自此 , 利用队列的死信交换机策略和利用rabbitmq_delayed_message_exchange插件实现RabbitMQ消息延迟已经介绍完毕 , 下面是.NET6 demo完整的项目结构
【.NET 6】RabbitMQ延迟消费指南

文章插图
其实除了这两种 , EasyNetQ也有一个调度器(Scheduler)可以实现延迟消息 , 但似乎需要依赖数据库 , 不是主流的做法不推荐使用 。
如有任何问题或者意见 , 欢迎评论 。

经验总结扩展阅读