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

wordpress网站实例网站怎么建设后台

wordpress网站实例,网站怎么建设后台,男女做暧暧试看网站,沧浪设计网站公司业务痛点分析在电商核心交易链路中,库存扣减时机始终是业务设计的难点。比如即时扣库存:影院选座/高铁购票场景中,用户体验优先原则要求下单即锁定资源。延迟任务是什么?核心需求:精准实现“下单后第30分钟检查支付状态…

业务痛点分析

在电商核心交易链路中,库存扣减时机始终是业务设计的难点。比如即时扣库存:影院选座/高铁购票场景中,用户体验优先原则要求下单即锁定资源。

延迟任务是什么?

核心需求:精准实现“下单后第30分钟检查支付状态”的定时操作
技术本质:延迟任务(Delayed Task)—— 在指定时间后触发执行的任务

RabbitMQ延迟消息方案对比

方案1:死信交换机(DLX) + TTL

// 死信队列声明
@Bean
public Queue ttlQueue() {Map<String, Object> args = new HashMap<>();args.put("x-dead-letter-exchange", "hmall.direct"); // 死信交换机args.put("x-dead-letter-routing-key", "blue");      // 路由Keyreturn new Queue("ttl.queue", true, false, false, args);
}

缺点:

  • 队首阻塞问题:仅当消息到达队首时才检查TTL

  • 精度不足:队列堆积时延迟误差可达分钟级

  • 配置繁琐:需声明多组交换机/队列

方案2:延迟消息插件(rabbitmq_delayed_message_exchange)

操作流程

1.安装插件

# 将插件放入卷目录
cp rabbitmq_delayed_message_exchange-3.8.17.ez /var/lib/docker/volumes/mq-plugins/_data# 启用插件
docker exec -it mq rabbitmq-plugins enable rabbitmq_delayed_message_exchange

2.声明延迟交换机

@Bean
public DirectExchange delayExchange() {return ExchangeBuilder.directExchange("delay.direct").delayed()  // 关键!启用延迟特性.durable(true).build();
}

3.发送延迟消息

rabbitTemplate.convertAndSend("delay.direct", "delay", message, msg -> {msg.getMessageProperties().setDelay(5000); // 5秒延迟return msg;
});

电商支付超时检测练习

业务优化:渐进式延迟检测

传统方案:30分钟后单次检测 → 资源浪费
创新方案:多级延迟检测(10s,20s,30s,45s,60s...30min)

核心数据结构

@Data
public class MultiDelayMessage<T> {private T data;              // 业务数据private List<Long> delayMillis; // 延迟时间序列// 获取并移除下一个延迟public Long removeNextDelay() {return delayMillis.remove(0);}// 构造示例public static <T> MultiDelayMessage<T> of(T data, Long... delays) {return new MultiDelayMessage<>(data, Arrays.asList(delays));}
}

消息监听实现

@RabbitListener(bindings = @QueueBinding(value = @Queue(name = MqConstants.DELAY_ORDER_QUEUE),exchange = @Exchange(name = MqConstants.DELAY_EXCHANGE, type = TOPIC),key = MqConstants.DELAY_ORDER_ROUTING_KEY
))
public void listenOrderCheck(MultiDelayMessage<Long> msg) {Long orderId = msg.getData();Order order = orderService.getById(orderId);// 订单不存在或已结束if (order == null || order.getStatus() > 1) return;  // 查询支付服务PayOrderDTO payOrder = payClient.queryPayOrderByBizOrderNo(orderId);if (payOrder != null && payOrder.getStatus() == 3) {orderService.markOrderPaySuccess(orderId);return;}// 继续延迟检测if (msg.hasNextDelay()) {Long nextDelay = msg.removeNextDelay();rabbitTemplate.convertAndSend(MqConstants.DELAY_EXCHANGE, MqConstants.DELAY_ORDER_ROUTING_KEY, msg, message -> {message.getMessageProperties().setDelay(nextDelay.intValue());return message;});return;}// 最终取消订单orderService.cancelOrder(orderId);
}

性能优化点

  1. 提前终止机制:任一阶段检测到支付成功立即终止流程

  2. 渐进时间设计:前密后疏的检测节奏

  3. 消息体复用:MultiDelayMessage对象全程复用减少序列化开销

订单取消业务实现

@Override
@Transactional
public void cancelOrder(Long orderId) {// 幂等性检查Order order = getById(orderId);if (order == null || order.getStatus() == 5) return; // 更新订单状态boolean updated = lambdaUpdate().setSql("status = 5") // 已关闭.eq(Order::getId, orderId).eq(Order::getStatus, 1) // 仅未支付订单可取消.update();if (!updated) return;// 恢复库存(消息通知商品服务)List<OrderDetail> details = orderDetailService.query().eq("order_id", orderId).list();List<ItemStockDTO> stockList = details.stream().map(d -> new ItemStockDTO(d.getItemId(), d.getNum())).collect(Collectors.toList());// 发送库存恢复消息rabbitMqHelper.sendMessage("stock.exchange", "stock.restore", stockList);
}

MQ工具类封装

// 自动配置类
@ConditionalOnProperty(prefix = "spring.rabbitmq.listener.simple.retry", name = "enabled")
@Configuration
public class MqConsumeErrorAutoConfiguration {@Value("${spring.application.name}")private String appName;@Beanpublic DirectExchange errorExchange() {return new DirectExchange("error.direct");}@Beanpublic Queue errorQueue() {return new Queue(appName + ".error.queue");}@Beanpublic Binding errorBinding() {return BindingBuilder.bind(errorQueue()).to(errorExchange()).with(appName);}@Beanpublic MessageRecoverer republishMessageRecoverer(AmqpTemplate amqpTemplate) {return new RepublishMessageRecoverer(amqpTemplate, "error.direct", appName);}
}// MQ工具类
public class RabbitMqHelper {private final RabbitTemplate rabbitTemplate;// 基础发送public void sendMessage(String exchange, String routingKey, Object msg) {rabbitTemplate.convertAndSend(exchange, routingKey, msg);}// 延迟发送public void sendDelayMessage(String exchange, String routingKey, Object msg, int delay) {rabbitTemplate.convertAndSend(exchange, routingKey, msg, message -> {message.getMessageProperties().setDelay(delay);return message;});}// 带确认机制的发送public void sendMessageWithConfirm(String exchange, String routingKey, Object msg, int maxRetries) {RetryTemplate retryTemplate = new RetryTemplate();retryTemplate.setRetryPolicy(new SimpleRetryPolicy(maxRetries));retryTemplate.execute(context -> {CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());rabbitTemplate.convertAndSend(exchange, routingKey, msg, correlationData);// 等待Broker确认correlationData.getFuture().get(3, TimeUnit.SECONDS);return null;});}
}

生产环境注意事项

1.延迟插件监控项

  • rabbitmq_delayed_message_exchange 进程内存占用

  • 延迟消息积压数量(x-delayed-messages队列)

  • MQ节点磁盘空间

2.死信队列防护

// 在声明队列时添加限制
@Bean
public Queue dlxQueue() {Map<String, Object> args = new HashMap<>();args.put("x-max-length", 10000);  // 最大消息数args.put("x-overflow", "reject-publish"); // 超限拒绝return new Queue("dlx.queue", true, false, false, args);
}

3.多级延迟配置建议

// 推荐的时间梯度(单位:毫秒)
Long[] delays = {10_000,    // 10秒20_000,    // 20秒30_000,    // 30秒45_000,    // 45秒60_000,    // 1分钟120_000,   // 2分钟300_000,   // 5分钟1800_000   // 30分钟
};

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

相关文章:

  • JVM内存分配
  • 兴化网站建设网站开发用什么语言比较好
  • 四川网站建设找珊瑚云公司装修通知告示怎么写
  • 从 inode 角度深入分析软硬链接的内核实现与设计
  • 游戏开发中的状态管理与定时器
  • 上海网站开发外包分类信息网站
  • Apifox+DeepSeek接口测试实战
  • 7、幽络源微服务项目实战:SpringSecurity用户权限查询与校验的配置和测试
  • 海丰县建设局官方网站南县网站制作
  • 重庆企业建站模板佛山全网营销推广
  • 基于C#的停车场管理系统实现
  • html怎么做网站wordpress还能用
  • 有域名和空间怎么做网站简单网站设计网站
  • 操作系统之初识Linux
  • Transformers Dataset 完全指南:从基础到高级应用
  • 建设工程教育网站重庆网站推广多少钱
  • 广饶网站建设chenqinghua wordpress
  • (ST 表、博弈)洛谷 P8818 CSP-S 2022 策略游戏 题解
  • 怎么在百度搜索到我的网站一个互联网公司可以做几个网站
  • LangChain核心组件最新文档及示例代码(2025年更新)
  • Linux多进程编程(下)
  • django 网站开发视频教程百度竞价是seo还是sem
  • 平谷网站建设服务阿里邮箱企业版登录入口
  • [光学原理与应用-472]:半导体芯片生产、测试的产业链中使用到哪些种类的激光器,技术原理,主要供应商。
  • JxBrowser 8.11.0 版本发布啦!
  • 达梦数据库---实时主备配置
  • 东莞电子网站建设哪儿有上线了做网站多少钱
  • 深度学习复现:CIFAR-10 数据集任务的实现
  • CTF之文件包含
  • 做的比较好看的国内网站陕西省建设网三类人员考试时间