diff --git a/.idea/compiler.xml b/.idea/compiler.xml index fbc0c62..4580c18 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,11 +6,11 @@ - + - + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 42cb2c1..07e6bd4 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml index fdf1fc8..94a25f7 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -1,7 +1,6 @@ - \ No newline at end of file diff --git a/decode-web-service.iml b/decode-service.iml similarity index 100% rename from decode-web-service.iml rename to decode-service.iml diff --git a/src/main/java/net/irext/decoder/RedisConfig.java b/src/main/java/net/irext/decoder/RedisConfig.java new file mode 100644 index 0000000..0e1dbc5 --- /dev/null +++ b/src/main/java/net/irext/decoder/RedisConfig.java @@ -0,0 +1,65 @@ +package net.irext.decoder; + +import net.irext.decoder.queue.MessagePublisher; +import net.irext.decoder.queue.MessagePublisherImpl; +import net.irext.decoder.queue.MessageSubscriber; +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; +import org.springframework.data.redis.serializer.GenericToStringSerializer; + +/** + * Filename: RedisConfig.java + * Revised: Date: 2018-12-29 + * Revision: Revision: 1.0 + *

+ * Description: Redis config class + *

+ * Revision log: + * 2018-12-29: created by strawmanbobi + */ +@Configuration +@ComponentScan("net.irext") +public class RedisConfig { + + @Bean + JedisConnectionFactory jedisConnectionFactory() { + return new JedisConnectionFactory(); + } + + @Bean + public RedisTemplate redisTemplate() { + final RedisTemplate template = new RedisTemplate(); + template.setConnectionFactory(jedisConnectionFactory()); + template.setValueSerializer(new GenericToStringSerializer(Object.class)); + return template; + } + + @Bean + MessageListenerAdapter messageListener() { + return new MessageListenerAdapter(new MessageSubscriber()); + } + + @Bean + RedisMessageListenerContainer redisContainer() { + final RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(jedisConnectionFactory()); + container.addMessageListener(messageListener(), topic()); + return container; + } + + @Bean + MessagePublisher redisPublisher() { + return new MessagePublisherImpl(redisTemplate(), topic()); + } + + @Bean + ChannelTopic topic() { + return new ChannelTopic("pubsub:queue"); + } +} \ No newline at end of file diff --git a/src/main/java/net/irext/decoder/model/DecodeSession.java b/src/main/java/net/irext/decoder/model/DecodeSession.java new file mode 100644 index 0000000..7851c55 --- /dev/null +++ b/src/main/java/net/irext/decoder/model/DecodeSession.java @@ -0,0 +1,42 @@ +package net.irext.decoder.model; + +/** + * Filename: DecodeSession.java + * Revised: Date: 2018-12-29 + * Revision: Revision: 1.0 + *

+ * Description: Decode session for decoding within connection + *

+ * Revision log: + * 2018-12-29: created by strawmanbobi + */ +public class DecodeSession { + + private Integer id; + private String name; + + public DecodeSession(Integer id, String name) { + this.id = id; + this.name = name; + } + + public DecodeSession() { + + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/src/main/java/net/irext/decoder/queue/MessagePublisher.java b/src/main/java/net/irext/decoder/queue/MessagePublisher.java new file mode 100644 index 0000000..6fd9210 --- /dev/null +++ b/src/main/java/net/irext/decoder/queue/MessagePublisher.java @@ -0,0 +1,17 @@ +package net.irext.decoder.queue; + +/** + * Filename: MessagePublisher.java + * Revised: Date: 2018-12-29 + * Revision: Revision: 1.0 + *

+ * Description: Message publisher for redis connection + *

+ * Revision log: + * 2018-12-29: created by strawmanbobi + */ +public interface MessagePublisher { + + void publish(final String message); + +} \ No newline at end of file diff --git a/src/main/java/net/irext/decoder/queue/MessagePublisherImpl.java b/src/main/java/net/irext/decoder/queue/MessagePublisherImpl.java new file mode 100644 index 0000000..61757af --- /dev/null +++ b/src/main/java/net/irext/decoder/queue/MessagePublisherImpl.java @@ -0,0 +1,38 @@ +package net.irext.decoder.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; + +/** + * Filename: MessagePublisherImpl.java + * Revised: Date: 2018-12-29 + * Revision: Revision: 1.0 + *

+ * Description: Message publisher for redis connection + *

+ * Revision log: + * 2018-12-29: created by strawmanbobi + */ +@Service +public class MessagePublisherImpl implements MessagePublisher { + + @Autowired + private RedisTemplate redisTemplate; + @Autowired + private ChannelTopic topic; + + public MessagePublisherImpl() { + } + + public MessagePublisherImpl(final RedisTemplate redisTemplate, final ChannelTopic topic) { + this.redisTemplate = redisTemplate; + this.topic = topic; + } + + public void publish(final String message) { + redisTemplate.convertAndSend(topic.getTopic(), message); + } + +} diff --git a/src/main/java/net/irext/decoder/queue/MessageSubscriber.java b/src/main/java/net/irext/decoder/queue/MessageSubscriber.java new file mode 100644 index 0000000..f17ba7f --- /dev/null +++ b/src/main/java/net/irext/decoder/queue/MessageSubscriber.java @@ -0,0 +1,30 @@ +package net.irext.decoder.queue; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.data.redis.connection.Message; +import org.springframework.data.redis.connection.MessageListener; +import org.springframework.stereotype.Service; + +/** + * Filename: MessageSubscriber.java + * Revised: Date: 2018-12-29 + * Revision: Revision: 1.0 + *

+ * Description: Message subscriber for redis connection + *

+ * Revision log: + * 2018-12-29: created by strawmanbobi + */ +@Service +public class MessageSubscriber implements MessageListener { + + public static List messageList = new ArrayList(); + + public void onMessage(final Message message, final byte[] pattern) { + messageList.add(message.toString()); + System.out.println("Message received: " + new String(message.getBody())); + } + +} diff --git a/src/main/java/net/irext/decoder/redisrepo/RedisRepository.java b/src/main/java/net/irext/decoder/redisrepo/RedisRepository.java new file mode 100644 index 0000000..dc0da4b --- /dev/null +++ b/src/main/java/net/irext/decoder/redisrepo/RedisRepository.java @@ -0,0 +1,27 @@ +package net.irext.decoder.redisrepo; + +import net.irext.decoder.model.DecodeSession; + +import java.util.Map; + +/** + * Filename: RedisRepository.java + * Revised: Date: 2018-12-29 + * Revision: Revision: 1.0 + *

+ * Description: Redis cache class + *

+ * Revision log: + * 2018-12-29: created by strawmanbobi + */ +public interface RedisRepository { + + Map findAllDecodeSessions(); + + void add(DecodeSession decodeSession); + + void delete(Integer id); + + DecodeSession find(Integer id); + +} \ No newline at end of file diff --git a/src/main/java/net/irext/decoder/redisrepo/RedisRepositoryImpl.java b/src/main/java/net/irext/decoder/redisrepo/RedisRepositoryImpl.java new file mode 100644 index 0000000..3a58d21 --- /dev/null +++ b/src/main/java/net/irext/decoder/redisrepo/RedisRepositoryImpl.java @@ -0,0 +1,56 @@ +package net.irext.decoder.redisrepo; + +import net.irext.decoder.model.DecodeSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Repository; + +import javax.annotation.PostConstruct; +import java.util.Map; + +/** + * Filename: RedisRepositoryImpl.java + * Revised: Date: 2018-12-29 + * Revision: Revision: 1.0 + *

+ * Description: Redis cache class + *

+ * Revision log: + * 2018-12-29: created by strawmanbobi + */ +@Repository +public class RedisRepositoryImpl implements RedisRepository { + private static final String KEY = "SESSION_KEY"; + + private RedisTemplate redisTemplate; + private HashOperations hashOperations; + + @Autowired + public RedisRepositoryImpl(RedisTemplate redisTemplate){ + this.redisTemplate = redisTemplate; + } + + @PostConstruct + private void init(){ + hashOperations = redisTemplate.opsForHash(); + } + + public void add(final DecodeSession decodeSession) { + hashOperations.put(KEY, decodeSession.getId(), decodeSession.getName()); + } + + public void delete(final Integer id) { + hashOperations.delete(KEY, id); + } + + public DecodeSession find(final Integer id){ + return (DecodeSession) hashOperations.get(KEY, id); + } + + public Map findAllDecodeSessions(){ + return hashOperations.entries(KEY); + } + + +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 11b9cc7..9c4e04a 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,6 @@ server.port=8082 +spring.cache.type=redis spring.redis.host=localhost spring.redis.port=6379