当前位置: 首页 > wzjs >正文

房地产公司网站建设pptxyz域名

房地产公司网站建设ppt,xyz域名,网站用什么平台开发,网站建设中的风险Spring Boot消息队列实战:RabbitMQ延迟队列与死信队列深度解析 引言 在现代分布式系统中,消息队列承担着解耦、削峰填谷和异步通信的重要职责。本文将深入探讨Spring Boot与RabbitMQ的整合应用,重点解析延迟队列与死信队列的实现原理及实战…

Spring Boot消息队列实战:RabbitMQ延迟队列与死信队列深度解析

引言

在现代分布式系统中,消息队列承担着解耦、削峰填谷和异步通信的重要职责。本文将深入探讨Spring Boot与RabbitMQ的整合应用,重点解析延迟队列与死信队列的实现原理及实战应用。通过完整的代码示例和配置讲解,帮助开发者掌握构建可靠消息系统的核心技能。


一、消息队列核心基础

1.1 消息队列核心概念

  • 生产者(Producer):消息的创建和发送者
  • 消费者(Consumer):消息的接收和处理者
  • Broker:消息代理服务器(RabbitMQ实例)
  • Exchange:消息路由规则定义(Direct/Topic/Fanout/Headers)
  • Queue:消息存储的队列容器
  • Binding:交换器与队列的绑定关系

1.2 RabbitMQ核心模型

Binding
Producer
Exchange
Queue
Consumer

二、Spring Boot整合RabbitMQ

2.1 环境配置

<!-- pom.xml -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
# application.yml
spring:rabbitmq:host: localhostport: 5672username: guestpassword: guest

2.2 基础消息收发实现

生产者配置
@Configuration
public class RabbitConfig {@Beanpublic Queue demoQueue() {return new Queue("demo.queue", true); // 持久化队列}
}@Service
public class MessageSender {@Autowiredprivate RabbitTemplate rabbitTemplate;public void sendMessage(String message) {rabbitTemplate.convertAndSend("demo.queue", message);}
}
消费者实现
@Component
@RabbitListener(queues = "demo.queue")
public class MessageReceiver {@RabbitHandlerpublic void process(String message) {System.out.println("Received: " + message);}
}

三、死信队列与延迟队列原理

3.1 死信队列(DLX)触发条件

  1. 消息被消费者拒绝(basic.reject/nack)且不重新入队
  2. 消息TTL过期
  3. 队列达到最大长度限制

3.2 延迟队列实现原理

TTL过期
主队列
死信交换器
实际消费队列

四、订单超时实战案例

4.1 队列配置

@Configuration
public class OrderQueueConfig {// 死信交换器@Beanpublic DirectExchange orderDLX() {return new DirectExchange("order.dlx.exchange");}// 实际消费队列@Beanpublic Queue orderProcessQueue() {return new Queue("order.process.queue");}// 延迟队列(订单超时队列)@Beanpublic Queue orderDelayQueue() {Map<String, Object> args = new HashMap<>();args.put("x-dead-letter-exchange", "order.dlx.exchange");args.put("x-message-ttl", 60000); // 1分钟超时args.put("x-dead-letter-routing-key", "order.process");return new Queue("order.delay.queue", true, false, false, args);}@Beanpublic Binding binding() {return BindingBuilder.bind(orderProcessQueue()).to(orderDLX()).with("order.process");}
}

4.2 订单服务实现

@Service
public class OrderService {@Autowiredprivate RabbitTemplate rabbitTemplate;public void createOrder(Order order) {// 1. 保存订单到数据库orderRepository.save(order);// 2. 发送延迟消息rabbitTemplate.convertAndSend("", // 默认直接发送到队列"order.delay.queue",order.getId(),message -> {message.getMessageProperties().setExpiration("60000"); // 单独设置消息TTLreturn message;});}
}

4.3 超时处理器

@Component
@RabbitListener(queues = "order.process.queue")
public class OrderTimeoutProcessor {@RabbitHandlerpublic void handleOrderTimeout(String orderId) {Order order = orderRepository.findById(orderId);if (order.getStatus() == OrderStatus.UNPAID) {order.setStatus(OrderStatus.CANCELED);orderRepository.save(order);log.warn("订单超时取消:{}", orderId);}}
}

五、关键注意事项

  1. TTL设置策略

    • 队列级别TTL:适用于统一过期时间的场景
    • 消息级别TTL:需注意队列中存在不同TTL时的处理策略
    • 两者同时设置时,取较小值
  2. 消息阻塞问题

    • 使用单独的延迟队列处理不同延迟时间需求
    • 避免在同一个队列中混合不同TTL的消息
  3. 消息可靠性保障

    // 开启生产者确认
    spring.rabbitmq.publisher-confirm-type=correlated
    // 开启消费者手动ACK
    @RabbitListener(queues = "queue")
    public void process(String msg, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) {try {// 业务处理channel.basicAck(tag, false);} catch (Exception e) {channel.basicNack(tag, false, true);}
    }
    

六、扩展应用场景

  1. 定时任务调度(替代轮询方案)
  2. 重试机制实现(通过TTL设置重试间隔)
  3. 分布式事务最终一致性保障
  4. 智能家居设备状态延迟同步

总结

本文深入剖析了RabbitMQ在Spring Boot中的整合应用,通过完整的订单超时案例演示了延迟队列与死信队列的实现方案。建议在实际开发中结合具体业务场景进行参数调优,并配合监控系统实现消息的可观测性。对于更复杂的延迟需求,可考虑RabbitMQ官方提供的延迟消息插件(rabbitmq-delayed-message-exchange)。


文章转载自:

http://klRqtlni.ysskn.cn
http://ZbjyrM5L.ysskn.cn
http://7IGRzeo4.ysskn.cn
http://wu9tYUZY.ysskn.cn
http://QbIpKkF4.ysskn.cn
http://pt7GE6Pn.ysskn.cn
http://ckDDI12M.ysskn.cn
http://ZJ2G5lxU.ysskn.cn
http://jcDKimex.ysskn.cn
http://EiTiO8S1.ysskn.cn
http://3OKKzdfx.ysskn.cn
http://eEXaBncl.ysskn.cn
http://gIFvUzBl.ysskn.cn
http://ZJJ1CxRP.ysskn.cn
http://NxnBthXo.ysskn.cn
http://fXZmr9Ys.ysskn.cn
http://fE65epP1.ysskn.cn
http://r9IsRYHN.ysskn.cn
http://QC9qW6hz.ysskn.cn
http://UfDzQxEG.ysskn.cn
http://oK9XxyHv.ysskn.cn
http://mHiDjAYd.ysskn.cn
http://OqhBJ5Qg.ysskn.cn
http://pQ6WyPko.ysskn.cn
http://6ze2WBGq.ysskn.cn
http://Ur8JB979.ysskn.cn
http://63BXzpqn.ysskn.cn
http://PujXfLc7.ysskn.cn
http://kxUtY3yo.ysskn.cn
http://13YvwEXu.ysskn.cn
http://www.dtcms.com/wzjs/703854.html

相关文章:

  • 建设银行 网站怎么打不开了网站登录接口怎么做
  • oa网站建设物业企业信息管理系统
  • 汕头市建设局造价信息网站电器企业网站建站
  • 家具网站建设案例wordpress免插件图床
  • 测网站打开的速度的网址石家庄免费专业做网站
  • 关于公司做网站供比价报告企业网上登记注册
  • 女装网站建设规划医院线上预约
  • 网站怎么会k如果网站没有做icp备案
  • 网站如何防止重登录设计师服务平台网
  • 营销型网站建设区别王也高清头像
  • 咨询类网站建设网页制作标题设置步骤
  • 网站开发后怎么上线如何自己设计创建一个网站
  • 网站如何做质保系统广点通广告平台
  • 做网站需要的软件前几年做那个网站能致富
  • 长春搜索引擎网站推广黄冈论坛遗爱网
  • 北京 网站建设 公东莞网站建设的公司
  • 营销型网站建设要点o2o网站建设效果
  • 长春网站建设方案托管做网站的外包公司上班好不好
  • 南京网站建设学习做网站网站是什么案件
  • 深圳网站建设找哪家公司wordpress的站点地址和
  • 网站上面怎么做链接做网站用python还是php
  • 企业形象网站开发seo排名优化排行
  • 网站老提示有风险最正规的购物平台
  • 做视频有赚钱的网站有哪些自然资源网站建设方案
  • 电商网站建设实训报告石排做网站
  • 3g医院网站模板湖南软件开发公司
  • 安全生产标准化建设网站商城网站建设企业
  • 保险行业网站建设做得好的网站建设公司
  • 做瞹瞹瞹视频网站php网站做代理服务器
  • 动画网站源码国外好用的免费服务器