Quantcast
Channel: Active questions tagged redis+java - Stack Overflow
Viewing all articles
Browse latest Browse all 2204

Java spring boot redis, publish within the subscriber's onMessage method

$
0
0

When the subscriber/listener completes execution, i wish to publish a new event to redis within the onMessage method in the subscriber.

RedisLettuceConfiguration

@Configurationpublic class RedisLettuceConfiguration {    @Bean    LettuceConnectionFactory lettuceConnectionFactory() {        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();        configuration.setHostName(OcrService.dotenv != null ? OcrService.dotenv.get("REDIS_HOST") : "127.0.0.1");        configuration.setPassword(OcrService.dotenv != null ? OcrService.dotenv.get("REDIS_PASSWORD") : "");        configuration.setPort(OcrService.dotenv != null ? (OcrService.dotenv.get("REDIS_PORT") != null ? Integer.parseInt(OcrService.dotenv.get("REDIS_PORT")) : 6379) : 6379);        return new LettuceConnectionFactory(configuration);    }    @Bean     RedisTemplate<String, Object> redisTemplate() {        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();        redisTemplate.setConnectionFactory(lettuceConnectionFactory());        redisTemplate.setValueSerializer(new GenericToStringSerializer<Object>(Object.class));        return redisTemplate;    }    //init listeners    @Bean    RedisMessageListenerContainer container() {        final RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();        redisMessageListenerContainer.setConnectionFactory(lettuceConnectionFactory());        redisMessageListenerContainer.addMessageListener(new MessageListenerAdapter(new OcrProcessorSubscriber()), new ChannelTopic("OCR-TOPIC"));        return redisMessageListenerContainer;    }    //end listeners    //start publisher    @Bean      ChannelTopic topic() {        return new ChannelTopic("OCR-TOPIC");    }    @Bean    IMessagePublisher messagePublisher() {        return new OcrSuccessPublisher(redisTemplate(), topic());    }    //end publisher}

OcrSuccessPublisher

@Componentpublic class OcrSuccessPublisher implements IMessagePublisher {    @Autowired    private RedisTemplate<String,Object> redisTemplate;    @Autowired    private ChannelTopic topic;    public OcrSuccessPublisher(RedisTemplate<String, Object> redisTemplate, ChannelTopic topic) {        this.redisTemplate = redisTemplate;        this.topic = topic;    }    @Override    public void publish(String message) {        redisTemplate.convertAndSend(topic.getTopic(),message);    }}

Objective of the method below is to publish a new event after listener completes successfuly

OcrProcessorSubscriber*

public class OcrProcessorSubscriber implements MessageListener {    private final List<String> messagesList = new ArrayList<>();    @Override    public void onMessage(Message message, byte[] pattern) {        System.out.println("Message Received:- " + message.toString());//how to publish message here e.g ocrSuccessPublisher.publish("new payload to redis");    }}

SOLVED BY

  1. Adding to RedisTemplate field type OcrProcessorSubscriber
    private RedisTemplate<String, Object> redisTemplate;    public OcrProcessorSubscriber(RedisTemplate<String, Object> redisTemplate){        this.redisTemplate=redisTemplate;    }@Override    public void onMessage(Message message, byte[] pattern) {        System.out.println("Message Received:- " + message.toString());        // Publish a message to another Redis channel       new OcrSuccessPublisher(redisTemplate, new ChannelTopic("OCR-TOPIC-PROCESSED")).publish("{\"fileId\":\"yyy\",\"ocrStatus\":\"PENDING\",\"fileName\":\"xx\"}");    }
  1. Updating RedisLettuceConfiguration
@Bean    RedisMessageListenerContainer container() {        final RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();        redisMessageListenerContainer.setConnectionFactory(lettuceConnectionFactory());        redisMessageListenerContainer.addMessageListener(new MessageListenerAdapter(new OcrProcessorSubscriber(redisTemplate())), new ChannelTopic("OCR-TOPIC"));        return redisMessageListenerContainer;    }

Viewing all articles
Browse latest Browse all 2204

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>