Added publish subscribe example using redis

This commit is contained in:
sameira 2016-02-18 22:48:42 +05:30
parent d0d3fff94d
commit 66eb5d7270
7 changed files with 198 additions and 66 deletions

View File

@ -1,10 +1,16 @@
package org.baeldung.spring.data.redis.config;
import org.baeldung.spring.data.redis.queue.RedisMessageSubscriber;
import org.baeldung.spring.data.redis.queue.RedisMessagePublisher;
import org.baeldung.spring.data.redis.queue.MessagePublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
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;
@Configuration
@ComponentScan("org.baeldung.spring.data.redis")
@ -21,4 +27,27 @@ public class RedisConfig {
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
@Bean
MessageListenerAdapter messageListener() {
return new MessageListenerAdapter(new RedisMessageSubscriber());
}
@Bean
RedisMessageListenerContainer redisContainer() {
final RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(jedisConnectionFactory());
container.addMessageListener(messageListener(), topic());
return container;
}
@Bean
MessagePublisher redisPublisher() {
return new RedisMessagePublisher(redisTemplate(), topic());
}
@Bean
ChannelTopic topic() {
return new ChannelTopic("pubsub:queue");
}
}

View File

@ -0,0 +1,7 @@
package org.baeldung.spring.data.redis.queue;
public interface MessagePublisher {
void publish(String message);
}

View File

@ -0,0 +1,28 @@
package org.baeldung.spring.data.redis.queue;
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 RedisMessagePublisher implements MessagePublisher {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private ChannelTopic topic;
public RedisMessagePublisher() {
}
public RedisMessagePublisher(RedisTemplate<String, Object> redisTemplate,
ChannelTopic topic) {
this.redisTemplate = redisTemplate;
this.topic = topic;
}
public void publish(String message) {
redisTemplate.convertAndSend(topic.getTopic(), message);
}
}

View File

@ -0,0 +1,19 @@
package org.baeldung.spring.data.redis.queue;
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class RedisMessageSubscriber implements MessageListener {
public static List<String> messageList = new ArrayList<String>();
public void onMessage(final Message message, final byte[] pattern) {
messageList.add(message.toString());
System.out.println("Message received: " + message.toString());
}
}

View File

@ -1,8 +1,6 @@
package org.baeldung.spring.data.redis.repo;
import org.baeldung.spring.data.redis.model.Student;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.util.Map;

View File

@ -0,0 +1,51 @@
package org.baeldung.spring.data.redis;
import org.baeldung.spring.data.redis.config.RedisConfig;
import org.baeldung.spring.data.redis.queue.RedisMessageSubscriber;
import org.baeldung.spring.data.redis.queue.RedisMessagePublisher;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.UUID;
import static org.junit.Assert.assertTrue;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = RedisConfig.class)
public class RedisMessageListenerTest {
@Autowired
private RedisMessagePublisher redisMessagePublisher;
@Test
public void testOnMessage() throws Exception {
String message = "Message " + UUID.randomUUID();
redisMessagePublisher.publish(message);
Thread.sleep(100);
assertTrue(RedisMessageSubscriber.messageList.get(0).contains(message));
}
public void testOnPMessage() throws Exception {
}
public void testOnSubscribe() throws Exception {
}
public void testOnUnsubscribe() throws Exception {
}
public void testOnPUnsubscribe() throws Exception {
}
public void testOnPSubscribe() throws Exception {
}
}