I am using below code. pattern is in byte[] type. Have to get the pattern as String for business logic. Is there any way to get it ! Have to make publisher or subscription topic names dynamic.
public class RedisConfig { @Bean JedisConnectionFactory jedisConnectionFactory() { JedisConnectionFactory jedis = new JedisConnectionFactory(); jedis.setHostName("xxxxxx.redis.cache.windows.net"); jedis.setPassword("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx="); jedis.setPort(6379); return jedis; } @Bean public RedisTemplate<String, Object> redisTemplate() { final RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); template.setConnectionFactory(jedisConnectionFactory()); template.setValueSerializer(new GenericToStringSerializer<Object>(Object.class)); return template; } @Bean MessageListenerAdapter messageListener() { return new MessageListenerAdapter(new CustomerInfoSubscriber()); } @Bean RedisMessageListenerContainer redisContainer() { final RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(jedisConnectionFactory()); container.addMessageListener(messageListener(), new PatternTopic("*/*")); container.setTaskExecutor(Executors.newFixedThreadPool(4)); return container; }
}
public class RedisCustomerInfoPublisher implements CustomerInfoPublisher {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Overridepublic void publish() { redisTemplate.convertAndSend("testing/1", "COMING FROM PUBLISHER"); }
}
public class CustomerInfoSubscriber implements MessageListener { @Override public void onMessage(Message message, byte[] pattern) { System.out.println(" ::::: Pattern 1 is "+ pattern.toString() +" ::::: "); System.out.println(" ::::: Pattern 2 is "+ Arrays.toString(pattern) +" ::::: "); System.out.println("Received >> "+ message +", "+ Thread.currentThread().getName() ); }}