SpringBoot+Redis実現オーダー30分支払いなし自動キャンセル

3727 ワード

redisのredisを変更します.confファイル
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を削除します.そうしないと、支払いに成功するかキャンセルされるかが発生します.