using Spring Data Redis to publish and subscribe to messages sent with Redis.
What You Will Build
StringRedisTemplate를 이용하여 메세지를 게시하고, MessageListenerAdapter를 이용하여 메세지를 가져오는 POJO를 구현해봅시다.
Standing up a Redis server
메세지의 수신과 송신을 컨트롤하기 위한 서버가 필요하기 때문에, Redis를 설치해서 서버를 띄워야 합니다.
Redis는 key-value의 데이터 저장소이며, 메세징 시스템을 제공합니다. 참고로 Redis는 캐싱에도 이용되는데 여기에 간단하게 정리해뒀습니다!
Redis 설치는 https://redis.io/download에서 가능합니다. 별도의 설정이 없다면 6379포트로 접근하면 이용할 수 있습니다.
Spring프로젝트를 시작할 때 Dependencies에서 Spring Data Redis를 체크하시거나 그냥 넘어가셨다면 직접 추가해주세요.
packagecom.example.messagingredis;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.context.ApplicationContext;importorg.springframework.context.annotation.Bean;importorg.springframework.data.redis.connection.RedisConnectionFactory;importorg.springframework.data.redis.core.StringRedisTemplate;importorg.springframework.data.redis.listener.PatternTopic;importorg.springframework.data.redis.listener.RedisMessageListenerContainer;importorg.springframework.data.redis.listener.adapter.MessageListenerAdapter;@SpringBootApplicationpublicclassMessagingRedisApplication{privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(MessagingRedisApplication.class);@BeanRedisMessageListenerContainercontainer(RedisConnectionFactoryconnectionFactory,MessageListenerAdapterlistenerAdapter){RedisMessageListenerContainercontainer=newRedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);container.addMessageListener(listenerAdapter,newPatternTopic("chat"));returncontainer;}@BeanMessageListenerAdapterlistenerAdapter(Receiverreceiver){returnnewMessageListenerAdapter(receiver,"receiveMessage");}@BeanReceiverreceiver(){returnnewReceiver();}@BeanStringRedisTemplatetemplate(RedisConnectionFactoryconnectionFactory){returnnewStringRedisTemplate(connectionFactory);}publicstaticvoidmain(String[]args)throwsInterruptedException{ApplicationContextctx=SpringApplication.run(MessagingRedisApplication.class,args);StringRedisTemplatetemplate=ctx.getBean(StringRedisTemplate.class);Receiverreceiver=ctx.getBean(Receiver.class);while(receiver.getCount()==0){LOGGER.info("Sending message...");template.convertAndSend("chat","Hello from Redis!");Thread.sleep(500L);}System.exit(0);}}