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

如何查询网站的注册信息小程序直播助手

如何查询网站的注册信息,小程序直播助手,网站色哦优化8888,iis6.1配置网站RabbitMQ 订单超时处理方案 使用 RabbitMQ 的 TTL 死信队列(DLX) RabbitMQ 的 TTL(Time-To-Live) 和 死信队列(Dead Letter Exchange) 是处理订单超时的常见方案。核心思路是设置消息的过期时间&#xff0…

RabbitMQ 订单超时处理方案

使用 RabbitMQ 的 TTL + 死信队列(DLX)

RabbitMQ 的 TTL(Time-To-Live)死信队列(Dead Letter Exchange) 是处理订单超时的常见方案。核心思路是设置消息的过期时间,超时后自动转入死信队列进行后续处理。

步骤:

  1. 创建订单时发送延迟消息
    订单创建后,向 RabbitMQ 发送一条带有 TTL 的消息(例如 30 分钟超时)。消息的 TTL 可以通过队列或消息本身设置。

    // 设置消息的 TTL(单位:毫秒)
    AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder().expiration("1800000") // 30分钟 = 30 * 60 * 1000.build();
    channel.basicPublish("", "order_queue", properties, message.getBytes());
    
  2. 配置死信队列
    定义一个死信交换器(DLX)和死信队列,绑定到原始队列。当消息超时后,RabbitMQ 会自动将其路由到死信队列。

    // 定义死信交换器和队列
    channel.exchangeDeclare("order_dlx", "direct");
    channel.queueDeclare("order_dead_letter_queue", true, false, false, null);
    channel.queueBind("order_dead_letter_queue", "order_dlx", "dead_letter");// 原始队列绑定死信交换器
    Map<String, Object> args = new HashMap<>();
    args.put("x-dead-letter-exchange", "order_dlx");
    args.put("x-dead-letter-routing-key", "dead_letter");
    channel.queueDeclare("order_queue", true, false, false, args);
    
  3. 消费死信队列处理超时订单
    监听死信队列,接收到消息时检查订单状态。若订单未支付,则执行取消逻辑(如释放库存、标记订单状态)。

    DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), StandardCharsets.UTF_8);// 解析订单ID,检查状态if (orderService.isOrderUnpaid(orderId)) {orderService.cancelOrder(orderId);}
    };
    channel.basicConsume("order_dead_letter_queue", true, deliverCallback, consumerTag -> {});
    

使用 RabbitMQ 插件 rabbitmq_delayed_message_exchange

如果需要更灵活的延迟时间(如动态设置不同订单的超时时间),可以使用官方插件 rabbitmq_delayed_message_exchange,支持延迟消息投递。

步骤:

  1. 安装插件
    在 RabbitMQ 服务器执行:

    rabbitmq-plugins enable rabbitmq_delayed_message_exchange
    
  2. 声明延迟交换器
    在 Java 代码中声明一个 x-delayed-message 类型的交换器。

    Map<String, Object> args = new HashMap<>();
    args.put("x-delayed-type", "direct");
    channel.exchangeDeclare("delayed_exchange", "x-delayed-message", true, false, args);
    channel.queueDeclare("delayed_queue", true, false, false, null);
    channel.queueBind("delayed_queue", "delayed_exchange", "delayed_routing_key");
    
  3. 发送延迟消息
    通过 x-delay 头设置延迟时间(毫秒)。

    Map<String, Object> headers = new HashMap<>();
    headers.put("x-delay", 1800000); // 30分钟延迟
    AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().headers(headers).build();
    channel.basicPublish("delayed_exchange", "delayed_routing_key", props, message.getBytes());
    
  4. 消费延迟消息
    监听队列处理超时逻辑,与死信队列方案类似。


注意事项
  • 幂等性处理
    消息可能重复投递(如消费者处理失败),需确保取消订单逻辑的幂等性。

  • 消息持久化
    若需要可靠性,将队列和消息设置为持久化:

    channel.queueDeclare("order_queue", true, false, false, args); // 持久化队列
    AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder().deliveryMode(2) // 持久化消息.build();
    
  • 替代方案
    高精度场景可结合数据库定时任务或 Redis 的键过期通知,但 RabbitMQ 方案更适用于分布式系统解耦。

http://www.dtcms.com/a/420377.html

相关文章:

  • 建立企业网站的技能用dw做网站的菜单栏
  • 宁夏石嘴山市城乡建设局提意见网站怎么网页下载jpg格式图片
  • 电动修眉刀MCU方案开发,基于国产单片机方案设计
  • 青岛做网站企业排名燕郊做网站公司
  • 购买qq空间访客的网站网络营销课程ppt
  • Coze源码分析-资源库-编辑插件-前端源码-核心组件
  • 校园网站平台建设标准化建设考评网站
  • DKD论文阅读
  • 如何用表格做网站wordpress 插件语言
  • 项目建设管理 公司 网站德城区建设局网站
  • AI 还原历史动漫视频:从文案到剪辑全流程拆解
  • 化妆品网站设计报告学网页设计先学什么
  • 网站代码怎么优化wordpress 打赏
  • 数据中心动环监控系统解决方案:构建 “全链路感知、零秒预警、智能联动” 的运维防护体系
  • 图片放大、缩小、恢复原比例、旋转vue
  • 最大的做网站公司win7配置不能运行wordpress
  • 网站开发H5微商商城官网
  • WPS文字如何合并多个文档:两种方法
  • 1、网关分类详解:从网络层到应用层的完整网关体系
  • 益阳市住房和城乡建设局网站手机seo百度点击软件
  • 【Linux基础知识系列:第一百四十一篇】使用curl进行API交互
  • 网站建设公司如何盈利苏州网站设计哪家公司好
  • 告别 “无效坚持”,拥抱 “复利成长” | 输出型爱好如何重塑习惯
  • 阿里云这么建设网站wordpress中的联系方式
  • 做微信公众号的网站吗网站设计论文前言怎么写
  • 网站 系统 区别惠州百度seo哪里强
  • 从linux0.11再探minix文件系统设计原理
  • HTML 解析入门:用 BeautifulSoup 轻松提取网页数据
  • 合肥营销网站建设价格陕西省建设网三类人员证书查询系统
  • 优先级队列(堆)-1046.最后一块砖的重量-力扣(LeetCode)