0


项目实战之RabbitMQ死信队列应用

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。


在这里插入图片描述


文章目录

🌟架构图

  1. 死信队列架构图在这里插入图片描述
  2. 本地消息表在这里插入图片描述

🌟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);}}

🌟消息发送、消费

  1. 接受到订单服务大哥锁定库存请求时,进行锁定库存消息的发送。
  2. 发送消息的同时,在本地消息表插入记录。
  3. 消息消费时,找订单服务大哥查询订单状态即可。
  4. 根据订单状态,进行后续处理。

🌟写在最后

RabbitMQ项目实战之死信队列应用到此就结束啦!感谢大家的阅读,欢迎大家在评论区进行交流。


请添加图片描述

标签: rabbitmq 分布式

本文转载自: https://blog.csdn.net/2302_79094329/article/details/134735108
版权归原作者 DaenCode 所有, 如有侵权,请联系我们删除。

“项目实战之RabbitMQ死信队列应用”的评论:

还没有评论