Skip to content

Commit

Permalink
feat: redis pub sub
Browse files Browse the repository at this point in the history
  • Loading branch information
thutasann committed Jan 12, 2025
1 parent d1efd99 commit 5472336
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,14 @@
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

import com.thutasann.project_management_backend.utilities.redis.RedisSubscriber;

@Configuration
public class RedisConfig {

Expand All @@ -31,4 +36,36 @@ public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connec

return template;
}

/**
* Channel Topic
*
* @return
*/
@Bean
public ChannelTopic topic() {
return new ChannelTopic("myTopic");
}

/**
* Redis Message Listener Container
*
* @param connectionFactory - connection factory
* @param listenerAdapter - listener adapter
* @return RedisMessageListenerContainer
*/
@Bean
public RedisMessageListenerContainer redisContainer(
RedisConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.addMessageListener(listenerAdapter, topic());
return container;
}

@Bean
public MessageListenerAdapter listenerAdapter(RedisSubscriber subscriber) {
return new MessageListenerAdapter(subscriber, "onMessage");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.thutasann.project_management_backend.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.thutasann.project_management_backend.utilities.redis.RedisPublisher;

/**
* Redis Testing Purpose
*/
@RestController
@RequestMapping("/redis")
public class RedisController {

@Autowired
private RedisPublisher redisPublisher;

@GetMapping("/publish")
public String publishMessage(@RequestParam String message) {
redisPublisher.publish(message);
return "Message published: " + message;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import com.thutasann.project_management_backend.service.project.IProjectService;
import com.thutasann.project_management_backend.service.user.IUserService;
import com.thutasann.project_management_backend.utilities.CustomLogger;
import com.thutasann.project_management_backend.utilities.RedisService;
import com.thutasann.project_management_backend.utilities.redis.RedisService;

@Service
public class IssueService implements IIssueService {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.thutasann.project_management_backend.utilities.redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.stereotype.Service;

@Service
public class RedisPublisher {
@Autowired
private RedisTemplate<String, Object> redisTemplate;

@Autowired
private ChannelTopic topic;

public void publish(String message) {
redisTemplate.convertAndSend(topic.getTopic(), message);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.thutasann.project_management_backend.utilities;
package com.thutasann.project_management_backend.utilities.redis;

import java.time.Duration;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.thutasann.project_management_backend.utilities.redis;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

@Service
public class RedisSubscriber {

private static final Logger logger = LoggerFactory.getLogger(RedisSubscriber.class);

public void onMessage(String message, String channel) {
logger.info("Received message '{}' from channel '{}'", message, channel);
}
}

0 comments on commit 5472336

Please sign in to comment.