zoukankan      html  css  js  c++  java
  • SpringBoot + Redis 实现订单30分钟不支付自动取消

    修改redis的redis.conf文件

    找到 notify-keyspace-events Ex 这一行 取消行前边的注释 开启键空间失效通知

    在SpringBoot项目的pom.xml中导入依赖

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>

    在项目中新建Listener 并继承自 KeyExpirationEventMessageListener

    @Component
    @Slf4j
    public class RedisKeyExpirationListener extends KeyExpirationEventMessageListener {
    
        @Autowired
        private OrderService orderService;
    
        public RedisKeyExpirationListener(RedisMessageListenerContainer listenerContainer) {
            super(listenerContainer);
        }
    
        @Override
        public void onMessage(Message message, byte[] pattern) {
            // 用户做自己的业务处理即可,注意message.toString()可以获取失效的key
            String expiredKey = message.toString();
            log.info("------------------redis key 失效; key = " + expiredKey);
            if (expiredKey.startsWith(GlobalConstant.RedisPrefixKey.ORDER_PREFIX)) {
                // 获取订单orderNO
                String orderNo = expiredKey.substring(expiredKey.lastIndexOf(":")+1);
                // 将待支付的订单改为已取消(超时未支付)
                orderService.orderPaidTimeout(orderNo);
            }
        }
    }

    新建配置类

    @Configuration
    public class RedisListenerConfig {
    
        @Bean
        RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
            RedisMessageListenerContainer container = new RedisMessageListenerContainer();
            container.setConnectionFactory(connectionFactory);
            return container;
        }
    
    }

    在生成订单的时候要将orderNo作为key放入redis,设置失效时长为30分钟

    在订单支付成功或者取消订单后删除redis中的key,不然会出现支付成功或者取消订单后还是超时未支付的情况

  • 相关阅读:
    一、汇编基础知识
    PHP RabbitMQ消息队列演示代码
    PHP CentOS下安装PHP及部署ThinkPHP
    MySQL CentOS下安装MySQL
    ThinkPHP 对接支付宝支付接口
    ThinkPHP 获取当前页面完整的URL地址
    前端 Validform.js属性,用法及Ajax提交简介
    PHP 配置Xdebug调试工具
    ThinkPHP 原生分页功能改进,更好用更美观
    ThinkPHP 使用第三方phpmailer库发送邮件
  • 原文地址:https://www.cnblogs.com/yangwanhao/p/12638410.html
Copyright © 2011-2022 走看看