UPDATE 02-sept
This commit is contained in:
10
pom.xml
10
pom.xml
@@ -123,6 +123,16 @@
|
|||||||
<groupId>com.google.cloud</groupId>
|
<groupId>com.google.cloud</groupId>
|
||||||
<artifactId>google-cloud-dlp</artifactId>
|
<artifactId>google-cloud-dlp</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.netty</groupId>
|
||||||
|
<artifactId>netty-codec-http2</artifactId>
|
||||||
|
<version>4.1.124.Final</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.protobuf</groupId>
|
||||||
|
<artifactId>protobuf-java</artifactId>
|
||||||
|
<version>3.25.5</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
|
|||||||
@@ -15,13 +15,8 @@ import org.springframework.context.annotation.Configuration;
|
|||||||
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
|
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
|
||||||
import org.springframework.data.redis.core.ReactiveRedisTemplate;
|
import org.springframework.data.redis.core.ReactiveRedisTemplate;
|
||||||
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
||||||
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
|
|
||||||
import org.springframework.data.redis.listener.PatternTopic;
|
|
||||||
import org.springframework.data.redis.serializer.RedisSerializationContext;
|
import org.springframework.data.redis.serializer.RedisSerializationContext;
|
||||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||||
import com.example.service.notification.NotificationExpirationListener;
|
|
||||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Spring configuration class for setting up Reactive Redis(Memorystore in GCP)
|
* Spring configuration class for setting up Reactive Redis(Memorystore in GCP)
|
||||||
@@ -79,14 +74,4 @@ public ReactiveRedisTemplate<String, NotificationSessionDTO> reactiveNotificatio
|
|||||||
.build();
|
.build();
|
||||||
return new ReactiveRedisTemplate<>(factory, context);
|
return new ReactiveRedisTemplate<>(factory, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
|
||||||
public RedisMessageListenerContainer keyExpirationListenerContainer(
|
|
||||||
@Autowired RedisConnectionFactory connectionFactory,
|
|
||||||
@Autowired NotificationExpirationListener notificationExpirationListener) {
|
|
||||||
RedisMessageListenerContainer listenerContainer = new RedisMessageListenerContainer();
|
|
||||||
listenerContainer.setConnectionFactory(connectionFactory);
|
|
||||||
listenerContainer.addMessageListener(notificationExpirationListener, new PatternTopic("__keyevent@*__:expired"));
|
|
||||||
return listenerContainer;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2025 Google. This software is provided as-is, without warranty or representation for any use or purpose.
|
|
||||||
* Your use of it is subject to your agreement with Google.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.example.service.notification;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.data.redis.connection.Message;
|
|
||||||
import org.springframework.data.redis.connection.MessageListener;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
|
|
||||||
@Service
|
|
||||||
public class NotificationExpirationListener implements MessageListener {
|
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(NotificationExpirationListener.class);
|
|
||||||
private final FirestoreNotificationService firestoreNotificationService;
|
|
||||||
private static final String NOTIFICATION_KEY_PREFIX = "notification:";
|
|
||||||
|
|
||||||
public NotificationExpirationListener(FirestoreNotificationService firestoreNotificationService) {
|
|
||||||
this.firestoreNotificationService = firestoreNotificationService;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onMessage(Message message, byte[] pattern) {
|
|
||||||
String expiredKey = new String(message.getBody());
|
|
||||||
logger.info("Expired key: " + expiredKey);
|
|
||||||
if (expiredKey.startsWith(NOTIFICATION_KEY_PREFIX)) {
|
|
||||||
String sessionId = expiredKey.substring(NOTIFICATION_KEY_PREFIX.length());
|
|
||||||
firestoreNotificationService.updateNotificationStatus(sessionId, "inactive")
|
|
||||||
.doOnSuccess(v -> logger.info("Notification status updated to inactive for session: " + sessionId))
|
|
||||||
.doOnError(e -> logger.error("Error updating notification status for session: " + sessionId, e))
|
|
||||||
.subscribe();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user