1.redis的订阅发布者
1.redis控制台实现
subscribe c1 c2 c3 订阅 c1 c2 c3

publish c1 “hello” 对c1 发消息



2.代码实现
1.pom和配置文件和代码目录
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
## redis所在的服务器IPspring.redis.host= 127.0.0.1## 端口spring.redis.port= 6379##密码,我这里没有设置,所以不填spring.redis.password=## 设置最大连接数,0为无限spring.redis.pool.max-active=8

2.配置配置文件
@Configurationpublic class RedisConfig {/*** redis消息监听器容器* 可以添加多个监听不同话题的redis监听器,只需要把消息监听器和相应的消息订阅处理器绑定,该消息监听器* 通过反射技术调用消息订阅处理器的相关方法进行一些业务处理* @param connectionFactory* @param recvAdapter1 第一个监听器* @param recvAdapter2 第二个监听器* @return*/@BeanRedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,MessageListenerAdapter recvAdapter1 , MessageListenerAdapter recvAdapter2) {RedisMessageListenerContainer container = new RedisMessageListenerContainer();container.setConnectionFactory(connectionFactory);container.addMessageListener(recvAdapter1, new PatternTopic("chat1"));//将订阅者1与chat频道绑定container.addMessageListener(recvAdapter2, new PatternTopic("chat2"));//将订阅者2与chat2频道绑定//这个container 可以添加多个 messageListenerreturn container;}/*** 消息监听器适配器,绑定消息处理器,利用反射技术调用消息处理器的业务方法* @param receiver* @return*/@BeanMessageListenerAdapter recvAdapter1(Recv receiver){//也有好几个重载方法,这边默认调用处理器的方法 叫handleMessage 可以自己到源码里面看return new MessageListenerAdapter(receiver, "recvMsg1");}@BeanMessageListenerAdapter recvAdapter2(Recv receiver){//也有好几个重载方法,这边默认调用处理器的方法 叫handleMessage 可以自己到源码里面看return new MessageListenerAdapter(receiver, "recvMsg2");}/**redis 读取内容的template 这边跟本工程无关,可以不配置*/@BeanStringRedisTemplate template(RedisConnectionFactory connectionFactory) {return new StringRedisTemplate(connectionFactory);}}
3.消费者的实现
@Componentpublic class Recv{public void recvMsg1(String msg){ //具体操作方法 名称随意System.out.println("收到消息1:"+msg);}public void recvMsg2(String msg){ //具体操作方法 名称随意System.out.println("收到消息2:"+msg);}}
4.编写测试类
@EnableScheduling //开启定时器功能@Componentpublic class MessageSender {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Scheduled(fixedRate = 2000) //间隔2s 通过StringRedisTemplate对象向redis消息队列chat频道发布消息public void sendMessage(){stringRedisTemplate.convertAndSend("chat1",String.valueOf(Math.random()));stringRedisTemplate.convertAndSend("chat2",String.valueOf(Math.random()));}}
5.结果

