电商平台,客户下单未支付,会有锁库存的操作,支付有效时间为15min,15分钟之后订单失效,释放库存,修改订单状态。如何实现?
默认已连接redis,并在springboot引入依赖
public class KeyExpiredListener extends KeyExpirationEventMessageListener {
private static final Logger LOGGER = LoggerFactory.getLogger(KeyExpiredListener.class);
public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) {
super(listenerContainer);
}
@Override
public void onMessage(Message message, byte[] pattern) {
String channel = new String(message.getChannel(),StandardCharsets.UTF_8);
String key = new String(message.getBody(),StandardCharsets.UTF_8);
String patternStr = new String(message.getBody(),StandardCharsets.UTF_8);
LOGGER.info("key失效:channel:{},key:{},patternStr:{}",channel,key,patternStr);
// 取到逾期支付订单的id
if (!StringUtils.isEmpty(key) && key.startsWith("orderId:")){
String[] split = key.split(":");
Long orderId = Long.parseLong(split[1]);
// TODO 进行更改状态的操作
}
}
}
@Configuration
public class RedisConfiguraion {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Bean
public RedisMessageListenerContainer redisMessageListenerContainer(){
RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();
redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
return redisMessageListenerContainer;
}
@Bean
public KeyExpiredListener keyExpiredListener(){
return new KeyExpiredListener(redisMessageListenerContainer());
}
@Bean
// @0表示只监听0号库的失效key,*表示监听所有
public PatternTopic patternTopic(){
return new PatternTopic("__keyevent@0__:expired");
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- nryq.cn 版权所有 赣ICP备2024042798号-6
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务