UPDATE 02-sept

This commit is contained in:
PAVEL PALMA
2025-09-02 14:16:30 -06:00
parent 4278541fff
commit 499bc002ae
3 changed files with 10 additions and 52 deletions

10
pom.xml
View File

@@ -123,6 +123,16 @@
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-dlp</artifactId>
</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>
<build>
<plugins>

View File

@@ -15,13 +15,8 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
import org.springframework.data.redis.core.ReactiveRedisTemplate;
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.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)
@@ -79,14 +74,4 @@ public ReactiveRedisTemplate<String, NotificationSessionDTO> reactiveNotificatio
.build();
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;
}
}

View File

@@ -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();
}
}
}