SpringBoot+Redis実現オーダー30分支払いなし自動キャンセル
3727 ワード
redisのredisを変更します.confファイル
notify-keyspace-events Exの行を見つけて行の前の注釈を取り消してキー空間の失効通知を開きます
SpringBootプロジェクトのpomでxmlでのインポート依存
プロジェクトにListenerを新規作成し、KeyExpirationEventMessageListenerから継承
新規構成クラス
注文を生成するときはorderNoをkeyとしてredisに入れ、失効時間を30分に設定します
オーダーの支払いに成功した後にredisのkeyを削除します.そうしないと、支払いに成功するかキャンセルされるかが発生します.
notify-keyspace-events Exの行を見つけて行の前の注釈を取り消してキー空間の失効通知を開きます
SpringBootプロジェクトのpomでxmlでのインポート依存
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
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を削除します.そうしないと、支払いに成功するかキャンセルされるかが発生します.