4 Ocak 2023 Çarşamba

SpringData Redis Pub/Sub - Persistent Değildir Consumer Çalışmıyorsa Mesajı Alamaz

Örnek
Elimizde şöyle bir topic olsun
@Bean
public ChannelTopic channelTopic(){
  return new ChannelTopic("pubsub:pageupdate");
}
Publisher için şöyle yaparız
// Publisher
@Service
@RequiredArgsConstructor
public class RedisPublishService {
  
private final ReactiveRedisTemplate reactiveRedisTemplate;
  private final ChannelTopic channelTopic;

    
  public void publish(List<String> updatedPageList){
    reactiveRedisTemplate.convertAndSend(channelTopic.getTopic(), updatedPageList).block();
  }
}
Consumer için şöyle yaparız
// Consumer
@Slf4j
public class RedisListenerService implements MessageListener {
  @Override
  public void onMessage(Message message, byte[] pattern) {
    log.info("Consumed on pub sub {}", message);
    TODO: implement your logic
  }
}

@Bean
public MessageListener messageListener(){
  return new MessageListenerAdapter(new RedisListenerService());
}

@Bean
public RedisMessageListenerContainer redisMessageListenerContainer(){
  RedisMessageListenerContainer container = new RedisMessageListenerContainer();
  container.setConnectionFactory(redisConnectionFactory());
  container.addMessageListener(messageListener(), channelTopic());
  return container;
}

Hiç yorum yok:

Yorum Gönder