🧑💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
文章目录
- 🌟架构图
- 🌟application.yml文件
- 🌟RabbitMQ配置
- 🌟消息发送、消费
- 🌟写在最后
🌟架构图
- 死信队列架构图
- 本地消息表
🌟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
@Data
public class RabbitMQConfig {/*** 交换机*/@Value("${mqconfig.stock_event_exchange}")private String eventExchange;/*** 第一个队列延迟队列,*/@Value("${mqconfig.stock_release_delay_queue}")private String stockReleaseDelayQueue;/*** 第一个队列的路由key* 进入队列的路由key*/@Value("${mqconfig.stock_release_delay_routing_key}")private String stockReleaseDelayRoutingKey;/*** 第二个队列,被监听恢复库存的队列*/@Value("${mqconfig.stock_release_queue}")private String stockReleaseQueue;/*** 第二个队列的路由key** 即进入死信队列的路由key*/@Value("${mqconfig.stock_release_routing_key}")private String stockReleaseRoutingKey;/*** 过期时间*/@Value("${mqconfig.ttl}")private Integer ttl;/*** 消息转换器* @return*/@Beanpublic MessageConverter messageConverter(){return new Jackson2JsonMessageConverter();}/*** 创建topic交换机* 一个微服务一个交换机* @return*/@Beanpublic Exchange stockEventExchange(){return new TopicExchange(eventExchange,true,false);}/*** 延迟队列* @return*/@Beanpublic Queue stockReleaseDelayQueue(){Map<String,Object> args=new HashMap<>();args.put("x-message-ttl",ttl);args.put("x-dead-letter-routing-key",stockReleaseRoutingKey);args.put("x-dead-letter-exchange",eventExchange);return new Queue(stockReleaseDelayQueue,true,false,false,args);}/*** 死信队列,用于被监听*/@Beanpublic Queue stockReleaseQueue(){return new Queue(stockReleaseQueue,true,false,false);}/*** 死信队列绑定关系* @return*/@Beanpublic Binding stockReleaseBinding(){return new Binding(stockReleaseQueue,Binding.DestinationType.QUEUE,eventExchange,stockReleaseRoutingKey,null);}/*** 延迟队列绑定关系* @return*/@Beanpublic Binding stockReleaseDelayBinding(){return new Binding(stockReleaseDelayQueue,Binding.DestinationType.QUEUE,eventExchange,stockReleaseDelayRoutingKey,null);}
}
🌟消息发送、消费
- 接受到订单服务大哥锁定库存请求时,进行锁定库存消息的发送。
- 发送消息的同时,在本地消息表插入记录。
- 消息消费时,找订单服务大哥查询订单状态即可。
- 根据订单状态,进行后续处理。
🌟写在最后
RabbitMQ项目实战之死信队列应用到此就结束啦!感谢大家的阅读,欢迎大家在评论区进行交流。