🧑💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
文章目录
🌟架构图
- 死信队列架构图
- 本地消息表
🌟application.yml文件
mqconfig:#延迟队列,不能被监听消费stock_release_delay_queue: stock.release.delay.queue
#延迟队列的消息过期后转发的队列stock_release_queue: stock.release.queue
#交换机stock_event_exchange: stock.event.exchange
#进入延迟队列的路由keystock_release_delay_routing_key: stock.release.delay.routing.key
#消息过期,进入释放队列的keystock_release_routing_key: stock.release.routing.key
#消息过期时间,毫秒,测试改为15秒ttl:360000
🌟RabbitMQ配置
@Configuration@DatapublicclassRabbitMQConfig{/**
* 交换机
*/@Value("${mqconfig.stock_event_exchange}")privateString eventExchange;/**
* 第一个队列延迟队列,
*/@Value("${mqconfig.stock_release_delay_queue}")privateString stockReleaseDelayQueue;/**
* 第一个队列的路由key
* 进入队列的路由key
*/@Value("${mqconfig.stock_release_delay_routing_key}")privateString stockReleaseDelayRoutingKey;/**
* 第二个队列,被监听恢复库存的队列
*/@Value("${mqconfig.stock_release_queue}")privateString stockReleaseQueue;/**
* 第二个队列的路由key
*
* 即进入死信队列的路由key
*/@Value("${mqconfig.stock_release_routing_key}")privateString stockReleaseRoutingKey;/**
* 过期时间
*/@Value("${mqconfig.ttl}")privateInteger ttl;/**
* 消息转换器
* @return
*/@BeanpublicMessageConvertermessageConverter(){returnnewJackson2JsonMessageConverter();}/**
* 创建topic交换机
* 一个微服务一个交换机
* @return
*/@BeanpublicExchangestockEventExchange(){returnnewTopicExchange(eventExchange,true,false);}/**
* 延迟队列
* @return
*/@BeanpublicQueuestockReleaseDelayQueue(){Map<String,Object> args=newHashMap<>();
args.put("x-message-ttl",ttl);
args.put("x-dead-letter-routing-key",stockReleaseRoutingKey);
args.put("x-dead-letter-exchange",eventExchange);returnnewQueue(stockReleaseDelayQueue,true,false,false,args);}/**
* 死信队列,用于被监听
*/@BeanpublicQueuestockReleaseQueue(){returnnewQueue(stockReleaseQueue,true,false,false);}/**
* 死信队列绑定关系
* @return
*/@BeanpublicBindingstockReleaseBinding(){returnnewBinding(stockReleaseQueue,Binding.DestinationType.QUEUE,eventExchange,stockReleaseRoutingKey,null);}/**
* 延迟队列绑定关系
* @return
*/@BeanpublicBindingstockReleaseDelayBinding(){returnnewBinding(stockReleaseDelayQueue,Binding.DestinationType.QUEUE,eventExchange,stockReleaseDelayRoutingKey,null);}}
🌟消息发送、消费
- 接受到订单服务大哥锁定库存请求时,进行锁定库存消息的发送。
- 发送消息的同时,在本地消息表插入记录。
- 消息消费时,找订单服务大哥查询订单状态即可。
- 根据订单状态,进行后续处理。
🌟写在最后
RabbitMQ项目实战之死信队列应用到此就结束啦!感谢大家的阅读,欢迎大家在评论区进行交流。
本文转载自: https://blog.csdn.net/2302_79094329/article/details/134735108
版权归原作者 DaenCode 所有, 如有侵权,请联系我们删除。
版权归原作者 DaenCode 所有, 如有侵权,请联系我们删除。