SpringBoot学习(六)连接Redis收发消息

我们会做什么?

SpringBoot学习(六)连接Redis收发消息

第一步:安装个Redis

这一步也不难,直接搜索Redis,然后从官网进入github连接,下载系统对应的版本,在这里要注意官网上只有Linux版本的,分辨方法:.tar.gz基本上是linux,而zip是win的。
我的是win,但是今年开始国内进不去github了,很蛋疼,幸好百度找了个网盘,下载了一个版本

SpringBoot学习(六)连接Redis收发消息
直接解压,也不用安装
SpringBoot学习(六)连接Redis收发消息
双击server.exe就看到下边这个黑框,证明启动成功,接下来就不管它了,弄spring。
SpringBoot学习(六)连接Redis收发消息

第二步:创建工程

这一步和之前相同,但是多了一个依赖

<dependency> 			<groupId>org.springframework.boot</groupId> 			<artifactId>spring-boot-starter-data-redis</artifactId> 		</dependency> 

如果依赖下载有问题,就指定版本,具体找版本的方法我在之前的博客里记录了。

依赖安装没问题之后,当然是设计一个监听消息的类Receiver

package com.springboot.second.redistest;  import org.slf4j.Logger; import org.slf4j.LoggerFactory;  import java.util.concurrent.atomic.AtomicInteger;  public class Receiver {     private static final Logger LOGGER = LoggerFactory.getLogger(Receiver.class);      private AtomicInteger counter = new AtomicInteger();      public void receiveMessage(String message){         LOGGER.info("Received <" + message + ">");         counter.incrementAndGet();     }      public int getCount(){         return counter.get();     } }  

主文件
首先注解一个Bean,RedisMessageListenerContainer,它是用来连接并监听适配Redis的类实例,在这里也印证了前文中学习时提到的@Bean知识,是类的一种,但又进行过实例化,因为它返回的一定是类实例。
在这里我不太懂**PatternTopic(“chat”)的意思,可能是但从下文中convertAndSend(“chat”, “Hello From Redis!”)**猜测,可能是发送键值对,监听键为chat的值,但这也只是猜测。

@Bean     RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,                                             MessageListenerAdapter listenerAdapter){         RedisMessageListenerContainer container = new RedisMessageListenerContainer();         container.setConnectionFactory(connectionFactory);         container.addMessageListener(listenerAdapter, new PatternTopic("chat"));          return container;     }      @Bean     MessageListenerAdapter listenerAdapter(Receiver receiver){         return new MessageListenerAdapter(receiver, "receiveMessage");     }      @Bean     Receiver receiver(){         return new Receiver();     }      @Bean     StringRedisTemplate template(RedisConnectionFactory connectionFactory){         return new StringRedisTemplate(connectionFactory);     }      public static void main(String[] args) throws InterruptedException {         ApplicationContext ctx =  SpringApplication.run(Application.class, args);          StringRedisTemplate template = ctx.getBean(StringRedisTemplate.class);          Receiver receiver = ctx.getBean(Receiver.class);          while (receiver.getCount() == 0 ) {             log.info("Sending message...");             template.convertAndSend("chat", "Hello From Redis!");             template.convertAndSend("chat", "Hello From Redis2!");             Thread.sleep(500L);         }  //        System.exit(0);     } 

我注释了exit命令,保证运行完之后不退出。

结果

运行代码之后,可以看到成功给redis发送了消息,
SpringBoot学习(六)连接Redis收发消息
为了弄清楚topic的流程,好不容易找到了redis topic相关的知识网站topic订阅和发布
SpringBoot学习(六)连接Redis收发消息
于是我同样订阅自己的chat,看到了一下SpringBoot学习(六)连接Redis收发消息
再去其官网,发现每个订阅的信息回复是3个值的数组,其中第一个值是消息的种类:有subscribe、unsubscribe和message三种,每一种里3个值的含义都不同,具体见下图。
SpringBoot学习(六)连接Redis收发消息
本文中类型是message,这是启动project,看到回复了message类的消息,内容是我写的Hello From Redis!

SpringBoot学习(六)连接Redis收发消息
OK,学习结束。

最后还有一个类ApplicationContext没有学习,后续补上。

完结撒花

版权声明:玥玥 发表于 2021-05-16 21:23:42。
转载请注明:SpringBoot学习(六)连接Redis收发消息 | 女黑客导航