一.配置文件
spring: redis: host: 192.168.0.200 port: 6379 password: database: 1 pool.max-active: 8 pool.max-wait: -1 pool.max-idle: 8 pool.min-idle: 0 timeout: 5000
二.坐标
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
三.redis消息监听器容器以及redis监听器注入IOC容器
package com.example.demo; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.listener.PatternTopic; import org.springframework.data.redis.listener.RedisMessageListenerContainer; import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; @Configuration @EnableCaching public class RedisConfig2{ /** * Redis消息监听器容器 * @param connectionFactory * @return */ @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); //订阅了一个叫pmp和channel 的通道,多通道 container.addMessageListener(listenerAdapter(new RedisPmpSub()),new PatternTopic("pmp")); container.addMessageListener(listenerAdapter(new RedisChannelSub()),new PatternTopic("channel")); //这个container 可以添加多个 messageListener return container; } /** * 配置消息接收处理类 * @param redisMsg 自定义消息接收类 * @return */ @Bean() @Scope("prototype") MessageListenerAdapter listenerAdapter(RedisMsg redisMsg) { //这个地方 是给messageListenerAdapter 传入一个消息接受的处理器,利用反射的方法调用“receiveMessage” //也有好几个重载方法,这边默认调用处理器的方法 叫handleMessage 可以自己到源码里面看 return new MessageListenerAdapter(redisMsg, "receiveMessage");//注意2个通道调用的方法都要为receiveMessage } }
四.普通的消息处理器接口
package com.example.demo; import org.springframework.stereotype.Component; @Component public interface RedisMsg { public void receiveMessage(String message); }
五.普通的消息处理器POJO
package com.example.demo; /** * @Auther: Administrator * @Date: 2018/7/9 11:01 * @Description: */ public class RedisChannelSub implements RedisMsg { @Override public void receiveMessage(String message) { //注意通道调用的方法名要和RedisConfig2的listenerAdapter的MessageListenerAdapter参数2相同 System.out.println("这是RedisChannelSub"+"-----"+message); } }
package com.example.demo; public class RedisPmpSub implements RedisMsg{ /** * 接收消息的方法 * @param message 订阅消息 */ public void receiveMessage(String message){ //注意通道调用的方法名要和RedisConfig2的listenerAdapter的MessageListenerAdapter参数2相同 System.out.println(message); } }
六.消息发布者
package com.example.demo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; //定时器 @EnableScheduling @Component public class TestSenderController { @Autowired private StringRedisTemplate stringRedisTemplate; //向redis消息队列index通道发布消息 @Scheduled(fixedRate = 2000) public void sendMessage(){ stringRedisTemplate.convertAndSend("pmp",String.valueOf(Math.random())); stringRedisTemplate.convertAndSend("channel",String.valueOf(Math.random())); } }
七.启动类
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
本文介绍了如何在SpringBoot项目中集成Redis,利用Redis的发布订阅功能创建消息监听器容器,并详细讲解了配置文件、相关依赖、消息处理器接口及其实现、消息发布者以及项目的启动流程。
1万+

被折叠的 条评论
为什么被折叠?



